<?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>52363</bug_id>
          
          <creation_ts>2011-01-13 03:02:48 -0800</creation_ts>
          <short_desc>Rename RGBA32Buffer to ImageFrame</short_desc>
          <delta_ts>2011-01-13 16:07:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>pkasting</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>333613</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-13 03:02:48 -0800</bug_when>
    <thetext>Rename RGBA32Buffer to DecodedImage</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333615</commentid>
    <comment_count>1</comment_count>
      <attachid>78793</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-13 03:04:39 -0800</bug_when>
    <thetext>Created attachment 78793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333617</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-13 03:06:40 -0800</bug_when>
    <thetext>Attachment 78793 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h:61:  The parameter name &quot;disposalMethod&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:104:  disposal_method is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 30 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333618</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-13 03:09:08 -0800</bug_when>
    <thetext>Attachment 78793 did not build on chromium:
Build output: http://queues.webkit.org/results/7590011</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333630</commentid>
    <comment_count>4</comment_count>
      <attachid>78793</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-13 03:40:35 -0800</bug_when>
    <thetext>Comment on attachment 78793
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333643</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-13 04:21:03 -0800</bug_when>
    <thetext>Attachment 78793 did not build on chromium:
Build output: http://queues.webkit.org/results/7615007</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333782</commentid>
    <comment_count>6</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-01-13 10:35:23 -0800</bug_when>
    <thetext>Are you sure about DecodedImage?  I had been thinking of using ImageFrame, which I thought would be clearer in the case of animated images that contain multiple frames (where one might assume the &quot;DecodedImage&quot; contained all frames).

I also wanted to move this class to platform/graphics at some point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333879</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-13 12:33:15 -0800</bug_when>
    <thetext>&gt; Are you sure about DecodedImage?

Nope!  That&apos;s why I posted it for review.  :)

&gt; I had been thinking of using ImageFrame, which I thought would be clearer in the case of animated images that contain multiple frames (where one might assume the &quot;DecodedImage&quot; contained all frames).

Is ImageFrame better than FrameBuffer?  That&apos;s what a bunch of methods are called now.

&gt; I also wanted to move this class to platform/graphics at some point.

Yes!  All in good time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333900</commentid>
    <comment_count>8</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2011-01-13 13:02:28 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; &gt; I had been thinking of using ImageFrame, which I thought would be clearer in the case of animated images that contain multiple frames (where one might assume the &quot;DecodedImage&quot; contained all frames).
&gt; 
&gt; Is ImageFrame better than FrameBuffer?  That&apos;s what a bunch of methods are called now.

Well, it&apos;s more consistent with other &quot;ImageXXX&quot; class names.  I&apos;m not sure how meaningful &quot;buffer&quot; is.  But the biggest problem with the original name was the &quot;RGBA32&quot; part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333959</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-13 15:01:48 -0800</bug_when>
    <thetext>ImageFrame it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333966</commentid>
    <comment_count>10</comment_count>
      <attachid>78861</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-13 15:07:11 -0800</bug_when>
    <thetext>Created attachment 78861
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333968</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-13 15:09:17 -0800</bug_when>
    <thetext>Attachment 78861 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.h:61:  The parameter name &quot;disposalMethod&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:104:  disposal_method is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>333999</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-13 15:55:43 -0800</bug_when>
    <thetext>Committed r75748: &lt;http://trac.webkit.org/changeset/75748&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334003</commentid>
    <comment_count>13</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-01-13 16:02:17 -0800</bug_when>
    <thetext>Renamed bug title so that it is consistent with the bug title mentioned in the change log entry for changeset 75748 &lt;http://trac.webkit.org/changeset/75748&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334006</commentid>
    <comment_count>14</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-01-13 16:07:12 -0800</bug_when>
    <thetext>Thanks Dan.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78793</attachid>
            <date>2011-01-13 03:04:39 -0800</date>
            <delta_ts>2011-01-13 15:07:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52363-20110113030437.patch</filename>
            <type>text/plain</type>
            <size>65849</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NzA3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI5IEBACisyMDExLTAxLTEzICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIFJHQkEzMkJ1ZmZlciB0byBEZWNvZGVkSW1hZ2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMzYzCisKKyAg
ICAgICAgUkdCQTMyIGlzIGEgYml0IG9mIGEgbWlzbm9tZXIgZm9yIHRoaXMgY2xhc3MuICBJdCBy
ZWFsbHkKKyAgICAgICAgcmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZS4gIFRoaXMgcGF0Y2gg
aXMgYSBwdXJlIHNlYXJjaCBhbmQKKyAgICAgICAgcmVwbGFjZSBvbiB0aGUgY2xhc3MgbmFtZS4g
IEluIGEgc3Vic2VxdWVudCBwYXRjaCwgSSdsbCBhZGp1c3QKKyAgICAgICAgdGhlIHJlbGF0ZWQg
bmFtZXMuCisKKyAgICAgICAgTm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogV2ViQ29y
ZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRGVjb2RlclF0OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsUmVhZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2RlclF0OjppbnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFnZSk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29k
ZWRJbWFnZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6
RGVjb2RlZEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6b3BlcmF0b3I9
KToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6Y2xlYXIpOgorICAgICAgICAoV2Vi
Q29yZTo6RGVjb2RlZEltYWdlOjp6ZXJvRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVk
SW1hZ2U6OmNvcHlSZWZlcmVuY2VUb0JpdG1hcERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVj
b2RlZEltYWdlOjpjb3B5Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1h
Z2U6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RlZEltYWdlOjpoYXNBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OnNldEhhc0FscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6c2V0Q29sb3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRlY29kZWRJbWFnZTo6c2V0U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZWRJ
bWFnZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RlZEltYWdlOjpoZWlnaHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjb2RlZEltYWdlOjpEZWNvZGVkSW1hZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2Vi
Q29yZTo6Qk1QSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1Q
SW1hZ2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvYm1wL0JNUEltYWdlUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRl
cjo6c2V0QnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9J
bWFnZURlY29kZXJDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OmFz
TmV3TmF0aXZlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0lt
YWdlRGVjb2RlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFB0ckFzUGl4ZWxEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6Y29weVJlZmVyZW5jZVRvQml0bWFwRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OmNvcHlCaXRtYXBEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpEZWNvZGVkSW1hZ2U6OmFzTmV3TmF0aXZlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1lQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6
OnJlYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5oOgorICAgICAgICAoR0lGRnJhbWVSZWFkZXI6OkdJRkZyYW1lUmVhZGVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OmFzTmV3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAg
IChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpqcGVnQ29tcGxldGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkRlY29kZWRJbWFnZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJD
b3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
TkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFn
ZURlY29kZXI6OmlzQ29tcGxldGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3F0L0RlY29kZWRJbWFnZVF0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6RGVjb2RlZEltYWdlOjpEZWNvZGVkSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2Rl
ZEltYWdlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RlZEltYWdlOjpjbGVh
cik6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6Onplcm9GaWxsKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6RGVjb2RlZEltYWdlOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZWRJbWFn
ZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6Omhh
c0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6c2V0SGFzQWxwaGEpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVjb2RlZEltYWdlOjpzZXRDb2xvclByb2ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RGVjb2RlZEltYWdlOjpzZXRTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6
RGVjb2RlZEltYWdlOjpzZXRQaXhtYXApOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RlZEltYWdl
Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OmhlaWdodCk6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVy
U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OkRlY29kZWRJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6Om9wZXJhdG9yPSk6CisgICAgICAgIChX
ZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkRlY29kZWRJ
bWFnZTo6emVyb0ZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2RlZEltYWdlOjpjb3B5Qml0
bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OnNldFNpemUpOgorICAg
ICAgICAoV2ViQ29yZTo6RGVjb2RlZEltYWdlOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6RGVj
b2RlZEltYWdlOjpzZXRIYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6
OnNldENvbG9yUHJvZmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OnNldFN0
YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OndpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6aGVpZ2h0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V0VCUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6
OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVjb2Rl
ZEltYWdlOjphc05ld05hdGl2ZUltYWdlKToKKwogMjAxMS0wMS0xMyAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybwkod29ya2luZyBjb3B5KQpAQCAtMTE3OSw3ICsxMTc5LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHAgXAogICAgIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uY3Bw
IFwKICAgICBwbGF0Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2UuY3BwIFwKLSAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHAgXAorICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3F0L0RlY29kZWRJbWFnZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERlc2NyaXB0aW9uLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNr
TGlzdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwIFwKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAJ
KHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsOCArMTMwLDggQEAgTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQQogICAgIGlmICghbV9kZWNvZGVyKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3Rh
dHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgIERlY29kZWRJbWFnZSogYnVm
ZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIGlmICghYnVm
ZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gRGVjb2RlZEltYWdlOjpGcmFtZUVtcHR5KQogICAg
ICAgICByZXR1cm4gMDsKIAogICAgIC8vIFplcm8taGVpZ2h0IGltYWdlcyBjYW4gY2F1c2UgcHJv
YmxlbXMgZm9yIHNvbWUgcG9ydHMuICBJZiB3ZSBoYXZlIGFuCkBAIC0xNDksOCArMTQ5LDggQEAg
ZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KAogICAgIGlmICghbV9kZWNv
ZGVyKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9k
ZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIGlmICghYnVmZmVyIHx8IGJ1
ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KQorICAgIERlY29kZWRJ
bWFnZSogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAg
IGlmICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gRGVjb2RlZEltYWdlOjpGcmFtZUVt
cHR5KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIE1hbnkgYW5ub3lpbmcgYWRzIHNwZWNp
ZnkgYSAwIGR1cmF0aW9uIHRvIG1ha2UgYW4gaW1hZ2UgZmxhc2ggYXMgcXVpY2tseSBhcyBwb3Nz
aWJsZS4KQEAgLTE4MCw4ICsxODAsOCBAQCBib29sIEltYWdlU291cmNlOjpmcmFtZUlzQ29tcGxl
dGVBdEluZGV4CiAgICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgo
aW5kZXgpOwotICAgIHJldHVybiBidWZmZXIgJiYgYnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJC
dWZmZXI6OkZyYW1lQ29tcGxldGU7CisgICAgRGVjb2RlZEltYWdlKiBidWZmZXIgPSBtX2RlY29k
ZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZm
ZXItPnN0YXR1cygpID09IERlY29kZWRJbWFnZTo6RnJhbWVDb21wbGV0ZTsKIH0KIAogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
RGVjb2RlclF0LmNwcAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3
ICsxMzEsNyBAQCBTdHJpbmcgSW1hZ2VEZWNvZGVyUXQ6OmZpbGVuYW1lRXh0ZW5zaW9uCiAgICAg
cmV0dXJuIFN0cmluZyhtX2Zvcm1hdC5jb25zdERhdGEoKSwgbV9mb3JtYXQubGVuZ3RoKCkpOwog
fTsKIAotUkdCQTMyQnVmZmVyKiBJbWFnZURlY29kZXJRdDo6ZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCkKK0RlY29kZWRJbWFnZSogSW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgLy8gSW4gY2FzZSB0aGUgSW1hZ2VEZWNvZGVyUXQg
Z290IHJlY3JlYXRlZCB3ZSBkb24ndCBrbm93CiAgICAgLy8geWV0IGhvdyBtYW55IGltYWdlcyB3
ZSBhcmUgZ29pbmcgdG8gaGF2ZSBhbmQgbmVlZCB0bwpAQCAtMTQ1LDggKzE0NSw4IEBAIFJHQkEz
MkJ1ZmZlciogSW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQnVmZmUKICAgICBpZiAoaW5kZXggPj0gY291
bnQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJh
bWVCdWZmZXJDYWNoZVtpbmRleF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1
ZmZlcjo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKKyAgICBEZWNvZGVkSW1hZ2UmIGZyYW1l
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKKyAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0g
RGVjb2RlZEltYWdlOjpGcmFtZUNvbXBsZXRlICYmIG1fcmVhZGVyKQogICAgICAgICBpbnRlcm5h
bFJlYWRJbWFnZShpbmRleCk7CiAgICAgcmV0dXJuICZmcmFtZTsKIH0KQEAgLTE4NSw3ICsxODUs
NyBAQCB2b2lkIEltYWdlRGVjb2RlclF0OjppbnRlcm5hbFJlYWRJbWFnZShzCiAKICAgICAvLyBB
dHRlbXB0IHRvIHJldHVybiBzb21lIG1lbW9yeQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9m
cmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lQnVmZmVy
Q2FjaGVbaV0uc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQorICAgICAg
ICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlW2ldLnN0YXR1cygpICE9IERlY29kZWRJbWFnZTo6RnJh
bWVDb21wbGV0ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIxMSwxMCArMjEx
LDEwIEBAIGJvb2wgSW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsSGFuZGxlQ3VycmUKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIC8vIG5vdyBpbnRvIHRoZSBSR0JBMzJCdWZmZXIg
LSBldmVuIGlmIHRoZSBpbWFnZSBpcyBub3QKLSAgICBSR0JBMzJCdWZmZXIqIGNvbnN0IGJ1ZmZl
ciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CisgICAgLy8gbm93IGludG8gdGhl
IERlY29kZWRJbWFnZSAtIGV2ZW4gaWYgdGhlIGltYWdlIGlzIG5vdAorICAgIERlY29kZWRJbWFn
ZSogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKICAgICBi
dWZmZXItPnNldFJlY3QobV9yZWFkZXItPmN1cnJlbnRJbWFnZVJlY3QoKSk7Ci0gICAgYnVmZmVy
LT5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBidWZmZXItPnNl
dFN0YXR1cyhEZWNvZGVkSW1hZ2U6OkZyYW1lQ29tcGxldGUpOwogICAgIGJ1ZmZlci0+c2V0RHVy
YXRpb24obV9yZWFkZXItPm5leHRJbWFnZURlbGF5KCkpOwogICAgIGJ1ZmZlci0+c2V0UGl4bWFw
KHBpeG1hcCk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmgJKHJldmlzaW9uIDc1NzA1
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzU2l6ZUF2YWlsYWJsZSgpOwogICAgIHZpcnR1YWwgc2l6ZV90IGZyYW1lQ291bnQoKTsK
ICAgICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFJH
QkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisgICAgdmlydHVh
bCBEZWNvZGVkSW1hZ2UqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwogCiAgICAg
dmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5j
cHAJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luY2UvSW1hZ2VXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1OYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3
TmF0aXZlSW1hZ2UoKSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgRGVjb2RlZEltYWdlOjphc05ld05h
dGl2ZUltYWdlKCkgY29uc3QKIHsKICAgICByZXR1cm4gU2hhcmVkQml0bWFwOjpjcmVhdGUobV9i
YWNraW5nU3RvcmUsIG1fc2l6ZSwgaGFzQWxwaGEoKSk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJ
KHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDcgKzEwMyw3IEBAIElt
YWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpjcmVhdGUoY29uc3QKIAogI2lmICFQTEFURk9STShT
S0lBKQogCi1SR0JBMzJCdWZmZXI6OlJHQkEzMkJ1ZmZlcigpCitEZWNvZGVkSW1hZ2U6OkRlY29k
ZWRJbWFnZSgpCiAgICAgOiBtX2hhc0FscGhhKGZhbHNlKQogICAgICwgbV9zdGF0dXMoRnJhbWVF
bXB0eSkKICAgICAsIG1fZHVyYXRpb24oMCkKQEAgLTExMiw3ICsxMTIsNyBAQCBSR0JBMzJCdWZm
ZXI6OlJHQkEzMkJ1ZmZlcigpCiB7CiB9IAogCi1SR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6
b3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCitEZWNvZGVkSW1hZ2UmIERlY29k
ZWRJbWFnZTo6b3BlcmF0b3I9KGNvbnN0IERlY29kZWRJbWFnZSYgb3RoZXIpCiB7CiAgICAgaWYg
KHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC0xMjYsNyArMTI2LDcg
QEAgUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjbwogICAgIHJldHVybiAq
dGhpczsKIH0KIAotdm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkKK3ZvaWQgRGVjb2RlZEltYWdl
OjpjbGVhcigpCiB7CiAgICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKICAgICBtX2J5dGVzID0g
MDsKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6Y2xlYXIoKQogICAgIC8v
IGxhdGVyLgogfQogCi12b2lkIFJHQkEzMkJ1ZmZlcjo6emVyb0ZpbGwoKQordm9pZCBEZWNvZGVk
SW1hZ2U6Onplcm9GaWxsKCkKIHsKICAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRo
KCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CiAgICAgbV9oYXNBbHBo
YSA9IHRydWU7CkBAIC0xNDUsMTMgKzE0NSwxMyBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6emVyb0Zp
bGwoKQogCiAjaWYgIVBMQVRGT1JNKENHKQogCi12b2lkIFJHQkEzMkJ1ZmZlcjo6Y29weVJlZmVy
ZW5jZVRvQml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQordm9pZCBEZWNvZGVk
SW1hZ2U6OmNvcHlSZWZlcmVuY2VUb0JpdG1hcERhdGEoY29uc3QgRGVjb2RlZEltYWdlJiBvdGhl
cikKIHsKICAgICBBU1NFUlQodGhpcyAhPSAmb3RoZXIpOwogICAgIGNvcHlCaXRtYXBEYXRhKG90
aGVyKTsKIH0KIAotYm9vbCBSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IFJHQkEz
MkJ1ZmZlciYgb3RoZXIpCitib29sIERlY29kZWRJbWFnZTo6Y29weUJpdG1hcERhdGEoY29uc3Qg
RGVjb2RlZEltYWdlJiBvdGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtMTYzLDcgKzE2Myw3IEBAIGJvb2wgUkdCQTMyQnVmZmVyOjpjb3B5
Qml0bWFwRGF0YShjb25zdCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBSR0JBMzJCdWZm
ZXI6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQorYm9vbCBEZWNvZGVkSW1h
Z2U6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQogewogICAgIC8vIE5PVEU6
IFRoaXMgaGFzIG5vIHdheSB0byBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIGlmIHRoZSBy
ZXF1ZXN0ZWQKICAgICAvLyBzaXplIHdhcyB0b28gYmlnLi4uCkBAIC0xNzksMzIgKzE3OSwzMiBA
QCBib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsCiAKICNlbmRpZgogCi1i
b29sIFJHQkEzMkJ1ZmZlcjo6aGFzQWxwaGEoKSBjb25zdAorYm9vbCBEZWNvZGVkSW1hZ2U6Omhh
c0FscGhhKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9oYXNBbHBoYTsKIH0KIAotdm9pZCBSR0JB
MzJCdWZmZXI6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCit2b2lkIERlY29kZWRJbWFnZTo6c2V0
SGFzQWxwaGEoYm9vbCBhbHBoYSkKIHsKICAgICBtX2hhc0FscGhhID0gYWxwaGE7CiB9CiAKLXZv
aWQgUkdCQTMyQnVmZmVyOjpzZXRDb2xvclByb2ZpbGUoY29uc3QgQ29sb3JQcm9maWxlJiBjb2xv
clByb2ZpbGUpCit2b2lkIERlY29kZWRJbWFnZTo6c2V0Q29sb3JQcm9maWxlKGNvbnN0IENvbG9y
UHJvZmlsZSYgY29sb3JQcm9maWxlKQogewogICAgIG1fY29sb3JQcm9maWxlID0gY29sb3JQcm9m
aWxlOwogfQogCi12b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1
cykKK3ZvaWQgRGVjb2RlZEltYWdlOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQogewog
ICAgIG1fc3RhdHVzID0gc3RhdHVzOwogfQogCi1pbnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNv
bnN0CitpbnQgRGVjb2RlZEltYWdlOjp3aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2l6
ZS53aWR0aCgpOwogfQogCi1pbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBjb25zdAoraW50IERl
Y29kZWRJbWFnZTo6aGVpZ2h0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zaXplLmhlaWdodCgp
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ5LDEwICs0OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8gRklYTUU6IERvIHdl
IHdhbnQgYmV0dGVyIGVuY2Fwc3VsYXRpb24/CiAgICAgdHlwZWRlZiBWZWN0b3I8Y2hhcj4gQ29s
b3JQcm9maWxlOwogCi0gICAgLy8gVGhlIFJHQkEzMkJ1ZmZlciBvYmplY3QgcmVwcmVzZW50cyB0
aGUgZGVjb2RlZCBpbWFnZSBkYXRhIGluIFJHQkEzMgorICAgIC8vIFRoZSBEZWNvZGVkSW1hZ2Ug
b2JqZWN0IHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YSBpbiBSR0JBMzIKICAgICAv
LyBmb3JtYXQuICBUaGlzIGJ1ZmZlciBpcyB3aGF0IGFsbCBkZWNvZGVycyB3cml0ZSBhIHNpbmds
ZSBmcmFtZSBpbnRvLgogICAgIC8vIEZyYW1lcyBhcmUgdGhlbiBpbnN0YW50aWF0ZWQgZm9yIGRy
YXdpbmcgYnkgYmVpbmcgaGFuZGVkIHRoaXMgYnVmZmVyLgotICAgIGNsYXNzIFJHQkEzMkJ1ZmZl
ciB7CisgICAgY2xhc3MgRGVjb2RlZEltYWdlIHsKICAgICBwdWJsaWM6CiAgICAgICAgIGVudW0g
RnJhbWVTdGF0dXMgeyBGcmFtZUVtcHR5LCBGcmFtZVBhcnRpYWwsIEZyYW1lQ29tcGxldGUgfTsK
ICAgICAgICAgZW51bSBGcmFtZURpc3Bvc2FsTWV0aG9kIHsKQEAgLTcxLDEzICs3MSwxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxEYXRhOwog
I2VuZGlmCiAKLSAgICAgICAgUkdCQTMyQnVmZmVyKCk7CisgICAgICAgIERlY29kZWRJbWFnZSgp
OwogCi0gICAgICAgIFJHQkEzMkJ1ZmZlcihjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKSB7IG9w
ZXJhdG9yPShvdGhlcik7IH0KKyAgICAgICAgRGVjb2RlZEltYWdlKGNvbnN0IERlY29kZWRJbWFn
ZSYgb3RoZXIpIHsgb3BlcmF0b3I9KG90aGVyKTsgfQogCiAgICAgICAgIC8vIEZvciBiYWNrZW5k
cyB3aGljaCByZWZjb3VudCB0aGVpciBkYXRhLCB0aGlzIG9wZXJhdG9yIGRvZXNuJ3QgbmVlZCB0
bwogICAgICAgICAvLyBjcmVhdGUgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgb25seSBp
bmNyZWFzZSB0aGUgcmVmIGNvdW50LgotICAgICAgICBSR0JBMzJCdWZmZXImIG9wZXJhdG9yPShj
b25zdCBSR0JBMzJCdWZmZXImIG90aGVyKTsKKyAgICAgICAgRGVjb2RlZEltYWdlJiBvcGVyYXRv
cj0oY29uc3QgRGVjb2RlZEltYWdlJiBvdGhlcik7CiAKICAgICAgICAgLy8gRGVsZXRlcyB0aGUg
cGl4ZWwgZGF0YSBlbnRpcmVseTsgdXNlZCBieSBJbWFnZURlY29kZXIgdG8gc2F2ZSBtZW1vcnkK
ICAgICAgICAgLy8gd2hlbiB3ZSBubyBsb25nZXIgbmVlZCB0byBkaXNwbGF5IGEgZnJhbWUgYW5k
IG9ubHkgbmVlZCBpdHMgbWV0YWRhdGEuCkBAIC04OCwxMSArODgsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIC8vIENyZWF0ZXMgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0
YSBpbiB8b3RoZXJ8LCBzbyB0aGUgdHdvIGltYWdlcwogICAgICAgICAvLyBjYW4gYmUgbW9kaWZp
ZWQgaW5kZXBlbmRlbnRseS4gIFJldHVybnMgd2hldGhlciB0aGUgY29weSBzdWNjZWVkZWQuCi0g
ICAgICAgIGJvb2wgY29weUJpdG1hcERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJik7CisgICAgICAg
IGJvb2wgY29weUJpdG1hcERhdGEoY29uc3QgRGVjb2RlZEltYWdlJik7CiAKICAgICAgICAgLy8g
Q3JlYXRlcyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIGltYWdlIGRhdGEgaW4gfG90aGVyfC4gIFRo
ZSB0d28gaW1hZ2VzCiAgICAgICAgIC8vIHNoYXJlIGEgY29tbW9uIGJhY2tpbmcgc3RvcmUuCi0g
ICAgICAgIHZvaWQgY29weVJlZmVyZW5jZVRvQml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXIm
KTsKKyAgICAgICAgdm9pZCBjb3B5UmVmZXJlbmNlVG9CaXRtYXBEYXRhKGNvbnN0IERlY29kZWRJ
bWFnZSYpOwogCiAgICAgICAgIC8vIENvcGllcyB0aGUgcGl4ZWwgZGF0YSBhdCBbKHN0YXJ0WCwg
c3RhcnRZKSwgKGVuZFgsIHN0YXJ0WSkpIHRvIHRoZQogICAgICAgICAvLyBzYW1lIFgtY29vcmRp
bmF0ZXMgb24gZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZwpAQCAt
MzA3LDEwICszMDcsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUaGUgbnVt
YmVyIG9mIHJlcGV0aXRpb25zIHRvIHBlcmZvcm0gZm9yIGFuIGFuaW1hdGlvbiBsb29wLgogICAg
ICAgICB2aXJ0dWFsIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCB7IHJldHVybiBjQW5pbWF0
aW9uTm9uZTsgfQogCi0gICAgICAgIC8vIENhbGxlZCB0byBvYnRhaW4gdGhlIFJHQkEzMkJ1ZmZl
ciBmdWxsIG9mIGRlY29kZWQgZGF0YSBmb3IgcmVuZGVyaW5nLgorICAgICAgICAvLyBDYWxsZWQg
dG8gb2J0YWluIHRoZSBEZWNvZGVkSW1hZ2UgZnVsbCBvZiBkZWNvZGVkIGRhdGEgZm9yIHJlbmRl
cmluZy4KICAgICAgICAgLy8gVGhlIGRlY29kZXIgcGx1Z2luIHdpbGwgZGVjb2RlIGFzIG11Y2gg
b2YgdGhlIGZyYW1lIGFzIGl0IGNhbiBiZWZvcmUKICAgICAgICAgLy8gaGFuZGluZyBiYWNrIHRo
ZSBidWZmZXIuCi0gICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5k
ZXgoc2l6ZV90KSA9IDA7CisgICAgICAgIHZpcnR1YWwgRGVjb2RlZEltYWdlKiBmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90KSA9IDA7CiAKICAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHVu
ZGVybHlpbmcgaW1hZ2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxwaGEKICAgICAgICAgLy8gdHJh
bnNwYXJlbmN5LgpAQCAtMzU0LDcgKzM1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgaW50IHNjYWxlZFkoaW50IG9yaWdZLCBpbnQgc2VhcmNoU3RhcnQgPSAwKTsKIAogICAgICAg
ICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCi0gICAg
ICAgIFZlY3RvcjxSR0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKKyAgICAgICAgVmVj
dG9yPERlY29kZWRJbWFnZT4gbV9mcmFtZUJ1ZmZlckNhY2hlOwogICAgICAgICBDb2xvclByb2Zp
bGUgbV9jb2xvclByb2ZpbGU7CiAgICAgICAgIGJvb2wgbV9zY2FsZWQ7CiAgICAgICAgIFZlY3Rv
cjxpbnQ+IG1fc2NhbGVkQ29sdW1uczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3
IEBAIGJvb2wgQk1QSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVybiBJ
bWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1SR0JBMzJCdWZmZXIqIEJNUElt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKK0RlY29kZWRJbWFn
ZSogQk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewog
ICAgIGlmIChpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC03NSw4ICs3NSw4IEBAIFJHQkEz
MkJ1ZmZlciogQk1QSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmYKICAgICAgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlLmZpcnN0KCkuc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEpOwog
ICAgIH0KIAotICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZS5m
aXJzdCgpOwotICAgIGlmIChidWZmZXItPnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVD
b21wbGV0ZSkKKyAgICBEZWNvZGVkSW1hZ2UqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGUu
Zmlyc3QoKTsKKyAgICBpZiAoYnVmZmVyLT5zdGF0dXMoKSAhPSBEZWNvZGVkSW1hZ2U6OkZyYW1l
Q29tcGxldGUpCiAgICAgICAgIGRlY29kZShmYWxzZSk7CiAgICAgcmV0dXJuIGJ1ZmZlcjsKIH0K
QEAgLTk4LDcgKzk4LDcgQEAgdm9pZCBCTVBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlT
aQogICAgICAgICBzZXRGYWlsZWQoKTsKICAgICAvLyBJZiB3ZSdyZSBkb25lIGRlY29kaW5nIHRo
ZSBpbWFnZSwgd2UgZG9uJ3QgbmVlZCB0aGUgQk1QSW1hZ2VSZWFkZXIKICAgICAvLyBhbnltb3Jl
LiAgKElmIHdlIGZhaWxlZCwgfG1fcmVhZGVyfCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQuKQot
ICAgIGVsc2UgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIChtX2ZyYW1lQnVm
ZmVyQ2FjaGUuZmlyc3QoKS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUp
KQorICAgIGVsc2UgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIChtX2ZyYW1l
QnVmZmVyQ2FjaGUuZmlyc3QoKS5zdGF0dXMoKSA9PSBEZWNvZGVkSW1hZ2U6OkZyYW1lQ29tcGxl
dGUpKQogICAgICAgICBtX3JlYWRlci5jbGVhcigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdl
RGVjb2Rlci5oCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NyArNDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZp
bGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1cm4gImJtcCI7IH0KICAgICAgICAgdmlydHVh
bCB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyKiwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpOwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7Ci0gICAgICAgIHZpcnR1YWwgUkdC
QTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyAgICAgICAgdmly
dHVhbCBEZWNvZGVkSW1hZ2UqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwogICAg
ICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJl
ZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNp
YWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQogICAgICAgICAvLyBCTVBJbWFnZVJl
YWRlciEKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9C
TVBJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAkocmV2aXNpb24gNzU3MDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMCArNzcsMTAgQEAgYm9vbCBCTVBJbWFnZVJl
YWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVi
dWZmZXIgaWYgbmVlZGVkLgogICAgIEFTU0VSVChtX2J1ZmZlcik7ICAvLyBQYXJlbnQgc2hvdWxk
IHNldCB0aGlzIGJlZm9yZSBhc2tpbmcgdXMgdG8gZGVjb2RlIQotICAgIGlmIChtX2J1ZmZlci0+
c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CisgICAgaWYgKG1fYnVmZmVy
LT5zdGF0dXMoKSA9PSBEZWNvZGVkSW1hZ2U6OkZyYW1lRW1wdHkpIHsKICAgICAgICAgaWYgKCFt
X2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCksIG1fcGFyZW50LT5zaXpl
KCkuaGVpZ2h0KCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsg
Ly8gVW5hYmxlIHRvIGFsbG9jYXRlLgotICAgICAgICBtX2J1ZmZlci0+c2V0U3RhdHVzKFJHQkEz
MkJ1ZmZlcjo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgbV9idWZmZXItPnNldFN0YXR1cyhEZWNv
ZGVkSW1hZ2U6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFz
ZUFSR0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQogICAgICAg
ICAvLyBpdCBiYWNrIHRvIGZhbHNlIGhlcmUuICBXZSdsbCBzZXQgaXQgdHJ1ZSBiZWxvdyBpbiBh
bGwgY2FzZXMgd2hlcmUKICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0
aHJvdWdoLgpAQCAtMTIyLDcgKzEyMiw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJN
UChib29sIG9ubHkKICAgICB9CiAKICAgICAvLyBEb25lIQotICAgIG1fYnVmZmVyLT5zZXRTdGF0
dXMoUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBtX2J1ZmZlci0+c2V0U3RhdHVz
KERlY29kZWRJbWFnZTo6RnJhbWVDb21wbGV0ZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJl
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02NCwxMSArNjQsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IC8vIHxwYXJlbnR8IGlzIHRoZSBkZWNvZGVyIHRoYXQgb3ducyB1cy4KICAgICAgICAgLy8gfHN0
YXJ0T2Zmc2V0fCBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBCTVAgd2l0aGluIHRoZSBmaWxl
LgotICAgICAgICAvLyB8YnVmZmVyfCBwb2ludHMgYXQgYW4gZW1wdHkgUkdCQTMyQnVmZmVyIHRo
YXQgd2UnbGwgaW5pdGlhbGl6ZSBhbmQKKyAgICAgICAgLy8gfGJ1ZmZlcnwgcG9pbnRzIGF0IGFu
IGVtcHR5IERlY29kZWRJbWFnZSB0aGF0IHdlJ2xsIGluaXRpYWxpemUgYW5kCiAgICAgICAgIC8v
IGZpbGwgd2l0aCBkZWNvZGVkIGRhdGEuCiAgICAgICAgIEJNUEltYWdlUmVhZGVyKEltYWdlRGVj
b2RlciogcGFyZW50LCBzaXplX3QgZGVjb2RlZEFuZEhlYWRlck9mZnNldCwgc2l6ZV90IGltZ0Rh
dGFPZmZzZXQsIGJvb2wgdXNlc0FuZE1hc2spOwogCi0gICAgICAgIHZvaWQgc2V0QnVmZmVyKFJH
QkEzMkJ1ZmZlciogYnVmZmVyKSB7IG1fYnVmZmVyID0gYnVmZmVyOyB9CisgICAgICAgIHZvaWQg
c2V0QnVmZmVyKERlY29kZWRJbWFnZSogYnVmZmVyKSB7IG1fYnVmZmVyID0gYnVmZmVyOyB9CiAg
ICAgICAgIHZvaWQgc2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEpIHsgbV9kYXRhID0gZGF0YTsg
fQogCiAgICAgICAgIC8vIERvZXMgdGhlIGFjdHVhbCBkZWNvZGluZy4gIElmIHxvbmx5U2l6ZXwg
aXMgdHJ1ZSwgZGVjb2Rpbmcgb25seQpAQCAtMjc0LDcgKzI3NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgSW1hZ2VEZWNvZGVyKiBtX3BhcmVudDsKIAogICAgICAgICAvLyBUaGUg
ZGVzdGluYXRpb24gZm9yIHRoZSBwaXhlbCBkYXRhLgotICAgICAgICBSR0JBMzJCdWZmZXIqIG1f
YnVmZmVyOworICAgICAgICBEZWNvZGVkSW1hZ2UqIG1fYnVmZmVyOwogCiAgICAgICAgIC8vIFRo
ZSBmaWxlIHRvIGRlY29kZS4KICAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VE
ZWNvZGVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAkocmV2aXNpb24gNzU3MDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURl
Y29kZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1OYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZl
SW1hZ2UoKSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgRGVjb2RlZEltYWdlOjphc05ld05hdGl2ZUlt
YWdlKCkgY29uc3QKIHsKICAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9y
X2RhdGEoCiAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nh
c3Q8UGl4ZWxEYXRhKj4oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCShyZXZpc2lvbiA3
NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdl
RGVjb2RlckNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjIgKzMzLDIyIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJHQkEzMkJ1ZmZlcjo6UGl4ZWxEYXRhKiBnZXRQdHJB
c1BpeGVsRGF0YShDRk11dGFibGVEYXRhUmVmIGRhdGEpCitzdGF0aWMgRGVjb2RlZEltYWdlOjpQ
aXhlbERhdGEqIGdldFB0ckFzUGl4ZWxEYXRhKENGTXV0YWJsZURhdGFSZWYgZGF0YSkKIHsKLSAg
ICByZXR1cm4gZGF0YSA/IHJlaW50ZXJwcmV0X2Nhc3Q8UkdCQTMyQnVmZmVyOjpQaXhlbERhdGEq
PihDRkRhdGFHZXRNdXRhYmxlQnl0ZVB0cihkYXRhKSkgOiAwOworICAgIHJldHVybiBkYXRhID8g
cmVpbnRlcnByZXRfY2FzdDxEZWNvZGVkSW1hZ2U6OlBpeGVsRGF0YSo+KENGRGF0YUdldE11dGFi
bGVCeXRlUHRyKGRhdGEpKSA6IDA7CiB9CiAgICAKLXZvaWQgUkdCQTMyQnVmZmVyOjpjb3B5UmVm
ZXJlbmNlVG9CaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCit2b2lkIERlY29k
ZWRJbWFnZTo6Y29weVJlZmVyZW5jZVRvQml0bWFwRGF0YShjb25zdCBEZWNvZGVkSW1hZ2UmIG90
aGVyKQogewogICAgIEFTU0VSVCh0aGlzICE9ICZvdGhlcik7CiAgICAgbV9iYWNraW5nU3RvcmUg
PSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKICAgICBtX2J5dGVzID0gZ2V0UHRyQXNQaXhlbERhdGEo
bV9iYWNraW5nU3RvcmUuZ2V0KCkpOwotICAgIC8vIEZJWE1FOiBUaGUgcmVzdCBvZiB0aGlzIGZ1
bmN0aW9uIHNlZW1zIHJlZHVuZGFudCB3aXRoIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEu
CisgICAgLy8gRklYTUU6IFRoZSByZXN0IG9mIHRoaXMgZnVuY3Rpb24gc2VlbXMgcmVkdW5kYW50
IHdpdGggRGVjb2RlZEltYWdlOjpjb3B5Qml0bWFwRGF0YS4KICAgICBtX3NpemUgPSBvdGhlci5t
X3NpemU7CiAgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiB9CiAKLWJvb2wgUkdC
QTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQorYm9v
bCBEZWNvZGVkSW1hZ2U6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IERlY29kZWRJbWFnZSYgb3RoZXIp
CiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTYw
LDcgKzYwLDcgQEAgYm9vbCBSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IAogICAg
IHJldHVybiB0cnVlOwogfQogCi1ib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQgbmV3V2lk
dGgsIGludCBuZXdIZWlnaHQpCitib29sIERlY29kZWRJbWFnZTo6c2V0U2l6ZShpbnQgbmV3V2lk
dGgsIGludCBuZXdIZWlnaHQpCiB7CiAgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CiAgICAg
c2l6ZV90IGJhY2tpbmdTdG9yZVNpemUgPSBuZXdXaWR0aCAqIG5ld0hlaWdodCAqIHNpemVvZihQ
aXhlbERhdGEpOwpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGNyZWF0
ZUNvbG9yU3BhY2UoCiAjZW5kaWYKIH0KIAotTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjph
c05ld05hdGl2ZUltYWdlKCkgY29uc3QKK05hdGl2ZUltYWdlUHRyIERlY29kZWRJbWFnZTo6YXNO
ZXdOYXRpdmVJbWFnZSgpIGNvbnN0CiB7CiAgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4g
Y29sb3JTcGFjZShBZG9wdENGLCBjcmVhdGVDb2xvclNwYWNlKG1fY29sb3JQcm9maWxlKSk7CiAg
ICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIoQWRvcHRDRiwgQ0dE
YXRhUHJvdmlkZXJDcmVhdGVXaXRoQ0ZEYXRhKG1fYmFja2luZ1N0b3JlLmdldCgpKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE4LDEzICsxMTgsMTMgQEAgaW50IEdJRkltYWdlRGVjb2Rlcjo6
cmVwZXRpdGlvbkNvdW50KCkgYwogICAgIHJldHVybiBtX3JlcGV0aXRpb25Db3VudDsKIH0KIAot
UkdCQTMyQnVmZmVyKiBHSUZJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpCitEZWNvZGVkSW1hZ2UqIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbaW5kZXhdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1l
Q29tcGxldGUpCisgICAgRGVjb2RlZEltYWdlJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtp
bmRleF07CisgICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IERlY29kZWRJbWFnZTo6RnJhbWVDb21w
bGV0ZSkKICAgICAgICAgZGVjb2RlKGluZGV4ICsgMSwgR0lGRnVsbFF1ZXJ5KTsKICAgICByZXR1
cm4gJmZyYW1lOwogfQpAQCAtMTUxLDcgKzE1MSw3IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpj
bGVhckZyYW1lQnVmZmVyQ2EKICAgICAvLyBhbHdheXMgdXNlIEltYWdlU291cmNlOjpjbGVhcih0
cnVlLCAuLi4pIHRvIGNvbXBsZXRlbHkgZnJlZSB0aGUgbWVtb3J5IGluCiAgICAgLy8gdGhpcyBj
YXNlLgogICAgIGNsZWFyQmVmb3JlRnJhbWUgPSBzdGQ6Om1pbihjbGVhckJlZm9yZUZyYW1lLCBt
X2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIC0gMSk7Ci0gICAgY29uc3QgVmVjdG9yPFJHQkEzMkJ1
ZmZlcj46Oml0ZXJhdG9yIGVuZChtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSArIGNsZWFyQmVm
b3JlRnJhbWUpOworICAgIGNvbnN0IFZlY3RvcjxEZWNvZGVkSW1hZ2U+OjppdGVyYXRvciBlbmQo
bV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZyYW1lKTsKIAogICAgIC8v
IFdlIG5lZWQgdG8gcHJlc2VydmUgZnJhbWVzIHN1Y2ggdGhhdDoKICAgICAvLyAgICogV2UgZG9u
J3QgY2xlYXIgfGVuZHwKQEAgLTE3MSwxNiArMTcxLDE2IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVy
OjpjbGVhckZyYW1lQnVmZmVyQ2EKICAgICAvLyAgICogSWYgdGhlIGZyYW1lIGlzIHBhcnRpYWws
IHdlJ3JlIGRlY29kaW5nIGl0LCBzbyBkb24ndCBjbGVhciBpdDsgaWYgaXQKICAgICAvLyAgICAg
aGFzIGEgZGlzcG9zYWwgbWV0aG9kIG90aGVyIHRoYW4gRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3Vz
LCBzdG9wCiAgICAgLy8gICAgIHNjYW5uaW5nLCBhcyB3ZSdsbCBvbmx5IG5lZWQgdGhpcyBmcmFt
ZSB3aGVuIGRlY29kaW5nIHRoZSBuZXh0IG9uZS4KLSAgICBWZWN0b3I8UkdCQTMyQnVmZmVyPjo6
aXRlcmF0b3IgaShlbmQpOwotICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVn
aW4oKSkgJiYgKChpLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHx8IChp
LT5kaXNwb3NhbE1ldGhvZCgpID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZU92ZXJ3cml0ZVByZXZp
b3VzKSk7IC0taSkgewotICAgICAgICBpZiAoKGktPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6
RnJhbWVDb21wbGV0ZSkgJiYgKGkgIT0gZW5kKSkKKyAgICBWZWN0b3I8RGVjb2RlZEltYWdlPjo6
aXRlcmF0b3IgaShlbmQpOworICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVn
aW4oKSkgJiYgKChpLT5zdGF0dXMoKSA9PSBEZWNvZGVkSW1hZ2U6OkZyYW1lRW1wdHkpIHx8IChp
LT5kaXNwb3NhbE1ldGhvZCgpID09IERlY29kZWRJbWFnZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZp
b3VzKSk7IC0taSkgeworICAgICAgICBpZiAoKGktPnN0YXR1cygpID09IERlY29kZWRJbWFnZTo6
RnJhbWVDb21wbGV0ZSkgJiYgKGkgIT0gZW5kKSkKICAgICAgICAgICAgIGktPmNsZWFyKCk7CiAg
ICAgfQogCiAgICAgLy8gTm93IHxpfCBob2xkcyB0aGUgbGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHBy
ZXNlcnZlOyBjbGVhciBwcmlvciBmcmFtZXMuCi0gICAgZm9yIChWZWN0b3I8UkdCQTMyQnVmZmVy
Pjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7
Ci0gICAgICAgIEFTU0VSVChqLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlh
bCk7Ci0gICAgICAgIGlmIChqLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkp
CisgICAgZm9yIChWZWN0b3I8RGVjb2RlZEltYWdlPjo6aXRlcmF0b3IgaihtX2ZyYW1lQnVmZmVy
Q2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7CisgICAgICAgIEFTU0VSVChqLT5zdGF0dXMo
KSAhPSBEZWNvZGVkSW1hZ2U6OkZyYW1lUGFydGlhbCk7CisgICAgICAgIGlmIChqLT5zdGF0dXMo
KSAhPSBEZWNvZGVkSW1hZ2U6OkZyYW1lRW1wdHkpCiAgICAgICAgICAgICBqLT5jbGVhcigpOwog
ICAgIH0KIH0KQEAgLTIyMCw4ICsyMjAsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURl
Y29kZWRSb3codW5zCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0
aGUgZnJhbWUgaWYgbmVjZXNzYXJ5LgotICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJH
QkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkK
KyAgICBEZWNvZGVkSW1hZ2UmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
XTsKKyAgICBpZiAoKGJ1ZmZlci5zdGF0dXMoKSA9PSBEZWNvZGVkSW1hZ2U6OkZyYW1lRW1wdHkp
ICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIC8vIFdyaXRlIG9uZSByb3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAg
CkBAIC0yNTEsMTUgKzI1MSwxNSBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRS
b3codW5zCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIFJH
QkEzMkJ1ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKK2Jvb2wgR0lG
SW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVk
IGZyYW1lRHVyYXRpb24sIERlY29kZWRJbWFnZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3Nh
bE1ldGhvZCkKIHsKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuICBT
b21lIEdJRnMgaW5zZXJ0IGRvLW5vdGhpbmcgZnJhbWVzLAogICAgIC8vIGluIHdoaWNoIGNhc2Ug
d2UgbmV2ZXIgcmVhY2ggaGF2ZURlY29kZWRSb3coKSBiZWZvcmUgZ2V0dGluZyBoZXJlLgotICAg
IFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwot
ICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYg
IWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICBEZWNvZGVkSW1hZ2UmIGJ1ZmZlciA9
IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKKyAgICBpZiAoKGJ1ZmZlci5zdGF0dXMo
KSA9PSBEZWNvZGVkSW1hZ2U6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJ
bmRleCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gaW5pdEZyYW1lQnVmZmVyKCkgaGFzIGFs
cmVhZHkgY2FsbGVkIHNldEZhaWxlZCgpLgogCi0gICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJC
dWZmZXI6OkZyYW1lQ29tcGxldGUpOworICAgIGJ1ZmZlci5zZXRTdGF0dXMoRGVjb2RlZEltYWdl
OjpGcmFtZUNvbXBsZXRlKTsKICAgICBidWZmZXIuc2V0RHVyYXRpb24oZnJhbWVEdXJhdGlvbik7
CiAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKGRpc3Bvc2FsTWV0aG9kKTsKIApAQCAtMjc3
LDggKzI3Nyw4IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2kKICAg
ICAgICAgICAgIC8vIEZpcnN0IHNraXAgb3ZlciBwcmlvciBEaXNwb3NlT3ZlcndyaXRlUHJldmlv
dXMgZnJhbWVzIChzaW5jZSB0aGV5CiAgICAgICAgICAgICAvLyBkb24ndCBhZmZlY3QgdGhlIHN0
YXJ0IHN0YXRlIG9mIHRoaXMgZnJhbWUpIHRoZSBzYW1lIHdheSB3ZSBkbyBpbgogICAgICAgICAg
ICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkuCi0gICAgICAgICAgICBjb25zdCBSR0JBMzJCdWZmZXIq
IHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAg
ICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9
PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpCisgICAgICAgICAgICBj
b25zdCBEZWNvZGVkSW1hZ2UqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJh
bWVJbmRleF07CisgICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldkJ1ZmZlci0+
ZGlzcG9zYWxNZXRob2QoKSA9PSBEZWNvZGVkSW1hZ2U6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91
cykpCiAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1m
cmFtZUluZGV4XTsKIAogICAgICAgICAgICAgLy8gTm93LCBpZiB3ZSdyZSBhdCBhIERpc3Bvc2VO
b3RTcGVjaWZpZWQgb3IgRGlzcG9zZUtlZXAgZnJhbWUsIHRoZW4KQEAgLTI4OSw3ICsyODksNyBA
QCBib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpCiAgICAgICAgICAgICAv
LyBUaGUgb25seSByZW1haW5pbmcgY2FzZSBpcyBhIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGZy
YW1lLiAgSWYKICAgICAgICAgICAgIC8vIGl0IGhhZCBubyBhbHBoYSwgYW5kIGl0cyByZWN0IGlz
IGNvbnRhaW5lZCBpbiB0aGUgY3VycmVudCBmcmFtZSdzCiAgICAgICAgICAgICAvLyByZWN0LCB3
ZSBrbm93IHRoZSBjdXJyZW50IGZyYW1lIGhhcyBubyBhbHBoYS4KLSAgICAgICAgICAgIGlmICgo
cHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVy
d3JpdGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucmVjdCgp
LmNvbnRhaW5zKHByZXZCdWZmZXItPnJlY3QoKSkpCisgICAgICAgICAgICBpZiAoKHByZXZCdWZm
ZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gRGVjb2RlZEltYWdlOjpEaXNwb3NlT3ZlcndyaXRlQmdj
b2xvcikgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnJlY3QoKS5jb250YWlu
cyhwcmV2QnVmZmVyLT5yZWN0KCkpKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBo
YShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzIsNyArMzMyLDcgQEAgYm9vbCBHSUZJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgIGlmIChmcmFtZVJlY3QuYm90dG9t
KCkgPiBzaXplKCkuaGVpZ2h0KCkpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgp
LmhlaWdodCgpIC0gZnJhbWVSZWFkZXItPnlfb2Zmc2V0KTsKIAotICAgIFJHQkEzMkJ1ZmZlciog
Y29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKKyAgICBEZWNv
ZGVkSW1hZ2UqIGNvbnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07
CiAgICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKICAgICBp
bnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QucmlnaHQoKSwgbGVmdCk7CiAg
ICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwpAQCAtMzUyLDE1
ICszNTIsMTUgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAg
ICAgICAvLyB0aGUgc3RhcnRpbmcgc3RhdGUgb2YgdGhlIHByZXZpb3VzIGZyYW1lLCBzbyBza2lw
IG92ZXIgdGhlbS4gIChJZiB0aGUKICAgICAgICAgLy8gZmlyc3QgZnJhbWUgc3BlY2lmaWVzIHRo
aXMgbWV0aG9kLCBpdCB3aWxsIGdldCB0cmVhdGVkIGxpa2UKICAgICAgICAgLy8gRGlzcG9zZU92
ZXJ3cml0ZUJnY29sb3IgYmVsb3cgYW5kIHJlc2V0IHRvIGEgY29tcGxldGVseSBlbXB0eSBpbWFn
ZS4pCi0gICAgICAgIGNvbnN0IFJHQkEzMkJ1ZmZlciogcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVm
ZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKLSAgICAgICAgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bv
c2FsTWV0aG9kIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwotICAg
ICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldk1ldGhvZCA9PSBSR0JBMzJCdWZmZXI6OkRp
c3Bvc2VPdmVyd3JpdGVQcmV2aW91cykpIHsKKyAgICAgICAgY29uc3QgRGVjb2RlZEltYWdlKiBw
cmV2QnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOworICAgICAgICBE
ZWNvZGVkSW1hZ2U6OkZyYW1lRGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9IHByZXZCdWZmZXIt
PmRpc3Bvc2FsTWV0aG9kKCk7CisgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2TWV0
aG9kID09IERlY29kZWRJbWFnZTo6RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSkgewogICAgICAg
ICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKICAg
ICAgICAgICAgIHByZXZNZXRob2QgPSBwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpOwogICAg
ICAgICB9Ci0gICAgICAgIEFTU0VSVChwcmV2QnVmZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZm
ZXI6OkZyYW1lQ29tcGxldGUpOworICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci0+c3RhdHVzKCkg
PT0gRGVjb2RlZEltYWdlOjpGcmFtZUNvbXBsZXRlKTsKIAotICAgICAgICBpZiAoKHByZXZNZXRo
b2QgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlTm90U3BlY2lmaWVkKSB8fCAocHJldk1ldGhvZCA9
PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VLZWVwKSkgeworICAgICAgICBpZiAoKHByZXZNZXRob2Qg
PT0gRGVjb2RlZEltYWdlOjpEaXNwb3NlTm90U3BlY2lmaWVkKSB8fCAocHJldk1ldGhvZCA9PSBE
ZWNvZGVkSW1hZ2U6OkRpc3Bvc2VLZWVwKSkgewogICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhl
IGxhc3QgZnJhbWUgYXMgdGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lLgogICAgICAg
ICAgICAgaWYgKCFidWZmZXItPmNvcHlCaXRtYXBEYXRhKCpwcmV2QnVmZmVyKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CkBAIC0zODksNyArMzg5LDcgQEAgYm9vbCBHSUZJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgIH0KIAogICAgIC8vIFVwZGF0ZSBv
dXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KLSAgICBidWZmZXItPnNldFN0YXR1
cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7CisgICAgYnVmZmVyLT5zZXRTdGF0dXMoRGVj
b2RlZEltYWdlOjpGcmFtZVBhcnRpYWwpOwogCiAgICAgLy8gUmVzZXQgdGhlIGFscGhhIHBpeGVs
IHRyYWNrZXIgZm9yIHRoaXMgZnJhbWUuCiAgICAgbV9jdXJyZW50QnVmZmVyU2F3QWxwaGEgPSBm
YWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDc1NzA1KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCBib29sIHNldFNpemUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAg
ICAgICAgdmlydHVhbCBzaXplX3QgZnJhbWVDb3VudCgpOwogICAgICAgICB2aXJ0dWFsIGludCBy
ZXBldGl0aW9uQ291bnQoKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworICAgICAgICB2aXJ0dWFsIERlY29kZWRJ
bWFnZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAgICAgICAgIC8vIENBVVRJ
T046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQK
ICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2Fs
bGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAgIC8vIEdJRkltYWdlUmVhZGVyIQpAQCAtNTgs
NyArNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIENhbGxiYWNrcyBmcm9t
IHRoZSBHSUYgcmVhZGVyLgogICAgICAgICB2b2lkIGRlY29kaW5nSGFsdGVkKHVuc2lnbmVkIGJ5
dGVzTGVmdCk7CiAgICAgICAgIGJvb2wgaGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRl
eCwgdW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVuc2ln
bmVkIHJvd051bWJlciwgdW5zaWduZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVu
dFBpeGVscyk7Ci0gICAgICAgIGJvb2wgZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4
LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRo
b2QgZGlzcG9zYWxNZXRob2QpOworICAgICAgICBib29sIGZyYW1lQ29tcGxldGUodW5zaWduZWQg
ZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgRGVjb2RlZEltYWdlOjpGcmFtZURp
c3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKTsKICAgICAgICAgdm9pZCBnaWZDb21wbGV0ZSgp
OwogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkocmV2aXNp
b24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzgsMTEgKzYzOCwxMSBAQCBi
b29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkCiAgICAgICAgIH0KICAgICAg
ICAgLy8gTk9URTogVGhpcyByZWxpZXMgb24gdGhlIHZhbHVlcyBpbiB0aGUgRnJhbWVEaXNwb3Nh
bE1ldGhvZCBlbnVtCiAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3BlYyEK
LSAgICAgICAgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QgPSAoV2ViQ29yZTo6UkdCQTMy
QnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kKSgoKCpxKSA+PiAyKSAmIDB4Nyk7CisgICAgICAg
IGZyYW1lX3JlYWRlci0+ZGlzcG9zYWxfbWV0aG9kID0gKFdlYkNvcmU6OkRlY29kZWRJbWFnZTo6
RnJhbWVEaXNwb3NhbE1ldGhvZCkoKCgqcSkgPj4gMikgJiAweDcpOwogICAgICAgICAvLyBTb21l
IHNwZWNzIHNheSAzcmQgYml0ICh2YWx1ZSA0KSwgb3RoZXIgc3BlY3Mgc2F5IHZhbHVlIDMKICAg
ICAgICAgLy8gTGV0J3MgY2hvb3NlIDMgKHRoZSBtb3JlIHBvcHVsYXIpCiAgICAgICAgIGlmIChm
cmFtZV9yZWFkZXItPmRpc3Bvc2FsX21ldGhvZCA9PSA0KQotICAgICAgICAgIGZyYW1lX3JlYWRl
ci0+ZGlzcG9zYWxfbWV0aG9kID0gV2ViQ29yZTo6UkdCQTMyQnVmZmVyOjpEaXNwb3NlT3Zlcndy
aXRlUHJldmlvdXM7CisgICAgICAgICAgZnJhbWVfcmVhZGVyLT5kaXNwb3NhbF9tZXRob2QgPSBX
ZWJDb3JlOjpEZWNvZGVkSW1hZ2U6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91czsKICAgICAgICAg
ZnJhbWVfcmVhZGVyLT5kZWxheV90aW1lID0gR0VUSU5UMTYocSArIDEpICogMTA7CiAgICAgICB9
CiAgICAgICBHRVROKDEsIGdpZl9jb25zdW1lX2Jsb2NrKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5oCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyAr
MTAxLDcgQEAgc3RydWN0IEdJRkZyYW1lUmVhZGVyIHsKICAgICB1bnNpZ25lZCBpbnQgeF9vZmZz
ZXQsIHlfb2Zmc2V0OyAgICAvKiBXaXRoIHJlc3BlY3QgdG8gInNjcmVlbiIgb3JpZ2luICovCiAg
ICAgdW5zaWduZWQgaW50IGhlaWdodCwgd2lkdGg7CiAgICAgaW50IHRwaXhlbDsgICAgICAgICAg
ICAgICAgIC8qIEluZGV4IG9mIHRyYW5zcGFyZW50IHBpeGVsICovCi0gICAgV2ViQ29yZTo6UkdC
QTMyQnVmZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsX21ldGhvZDsgICAvKiBSZXN0
b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuKi8KKyAgICBXZWJDb3JlOjpE
ZWNvZGVkSW1hZ2U6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxfbWV0aG9kOyAgIC8qIFJl
c3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4qLwogICAgIHVuc2lnbmVk
IGNoYXIgKmxvY2FsX2NvbG9ybWFwOyAgICAvKiBQZXItaW1hZ2UgY29sb3JtYXAgKi8KICAgICBp
bnQgbG9jYWxfY29sb3JtYXBfc2l6ZTsgICAgLyogU2l6ZSBvZiBsb2NhbCBjb2xvcm1hcCBhcnJh
eS4gKi8KICAgICAKQEAgLTEzMCw3ICsxMzAsNyBAQCBzdHJ1Y3QgR0lGRnJhbWVSZWFkZXIgewog
CiAgICAgICAgIHhfb2Zmc2V0ID0geV9vZmZzZXQgPSB3aWR0aCA9IGhlaWdodCA9IDA7CiAgICAg
ICAgIHRwaXhlbCA9IDA7Ci0gICAgICAgIGRpc3Bvc2FsX21ldGhvZCA9IFdlYkNvcmU6OlJHQkEz
MkJ1ZmZlcjo6RGlzcG9zZU5vdFNwZWNpZmllZDsKKyAgICAgICAgZGlzcG9zYWxfbWV0aG9kID0g
V2ViQ29yZTo6RGVjb2RlZEltYWdlOjpEaXNwb3NlTm90U3BlY2lmaWVkOwogCiAgICAgICAgIGxv
Y2FsX2NvbG9ybWFwID0gMDsKICAgICAgICAgbG9jYWxfY29sb3JtYXBfc2l6ZSA9IDA7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29k
ZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwCShyZXZpc2lvbiA3NTcwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2Rl
ckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLU5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFn
ZSgpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBEZWNvZGVkSW1hZ2U6OmFzTmV3TmF0aXZlSW1hZ2Uo
KSBjb25zdAogewogICAgIGludCBieXRlc1BlclJvdyA9IHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxE
YXRhKTsKICAgICBPd25QdHI8QkJpdG1hcD4gYml0bWFwKG5ldyBCQml0bWFwKEJSZWN0KDAsIDAs
IHdpZHRoKCkgLSAxLCBoZWlnaHQoKSAtIDEpLCAwLCBCX1JHQkEzMiwgYnl0ZXNQZXJSb3cpKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3NTcwNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksMTQgKzEwOSwxNCBAQCBzaXplX3QgSUNPSW1hZ2VE
ZWNvZGVyOjpmcmFtZUNvdW50KCkKICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUo
KTsKIH0KIAotUkdCQTMyQnVmZmVyKiBJQ09JbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRl
eChzaXplX3QgaW5kZXgpCitEZWNvZGVkSW1hZ2UqIElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICAvLyBFbnN1cmUgfGluZGV4fCBpcyB2YWxp
ZC4KICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIFJHQkEzMkJ1ZmZlciogYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07Ci0g
ICAgaWYgKGJ1ZmZlci0+c3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQor
ICAgIERlY29kZWRJbWFnZSogYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtpbmRleF07Cisg
ICAgaWYgKGJ1ZmZlci0+c3RhdHVzKCkgIT0gRGVjb2RlZEltYWdlOjpGcmFtZUNvbXBsZXRlKQog
ICAgICAgICBkZWNvZGUoaW5kZXgsIGZhbHNlKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQpAQCAt
MTYyLDcgKzE2Miw3IEBAIHZvaWQgSUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGUoc2l6ZV90IGluZGUK
ICAgICAvLyBJZiB3ZSdyZSBkb25lIGRlY29kaW5nIHRoaXMgZnJhbWUsIHdlIGRvbid0IG5lZWQg
dGhlIEJNUEltYWdlUmVhZGVyIG9yCiAgICAgLy8gUE5HSW1hZ2VEZWNvZGVyIGFueW1vcmUuICAo
SWYgd2UgZmFpbGVkLCB0aGVzZSBoYXZlIGFscmVhZHkgYmVlbgogICAgIC8vIGNsZWFyZWQuKQot
ICAgIGVsc2UgaWYgKChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpID4gaW5kZXgpICYmIChtX2Zy
YW1lQnVmZmVyQ2FjaGVbaW5kZXhdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21w
bGV0ZSkpIHsKKyAgICBlbHNlIGlmICgobV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSA+IGluZGV4
KSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XS5zdGF0dXMoKSA9PSBEZWNvZGVkSW1hZ2U6
OkZyYW1lQ29tcGxldGUpKSB7CiAgICAgICAgIG1fYm1wUmVhZGVyc1tpbmRleF0uY2xlYXIoKTsK
ICAgICAgICAgbV9wbmdEZWNvZGVyc1tpbmRleF0uY2xlYXIoKTsKICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNv
L0lDT0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNTEsNyArNTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
SW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwogICAgICAgICB2
aXJ0dWFsIHNpemVfdCBmcmFtZUNvdW50KCk7Ci0gICAgICAgIHZpcnR1YWwgUkdCQTMyQnVmZmVy
KiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90KTsKKyAgICAgICAgdmlydHVhbCBEZWNvZGVkSW1h
Z2UqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRG
YWlsZWQoKSBkZWxldGVzIGFsbCByZWFkZXJzIGFuZCBkZWNvZGVycy4gIEJlIGNhcmVmdWwgdG8K
ICAgICAgICAgLy8gYXZvaWQgYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdo
ZW4gY2FsbGluZyB0aGlzIGZyb20KICAgICAgICAgLy8gaW5zaWRlIEJNUEltYWdlUmVhZGVyIQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3NTcwNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyNSw3ICs0MjUsNyBAQCBib29sIEpQRUdJbWFn
ZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJHQkEz
MkJ1ZmZlciogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCkKK0RlY29kZWRJbWFnZSogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCkKIHsKICAgICBpZiAoaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDM1
LDggKzQzNSw4IEBAIFJHQkEzMkJ1ZmZlciogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWYKICAg
ICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0
aXBseUFscGhhKTsKICAgICB9CiAKLSAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZy
YW1lQ29tcGxldGUpCisgICAgRGVjb2RlZEltYWdlJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVswXTsKKyAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gRGVjb2RlZEltYWdlOjpGcmFtZUNvbXBs
ZXRlKQogICAgICAgICBkZWNvZGUoZmFsc2UpOwogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC00
NTMsMTEgKzQ1MywxMSBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVm
ZmVyIGlmIG5lZWRlZC4KLSAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJD
YWNoZVswXTsKLSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVF
bXB0eSkgeworICAgIERlY29kZWRJbWFnZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBd
OworICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gRGVjb2RlZEltYWdlOjpGcmFtZUVtcHR5KSB7
CiAgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxl
ZFNpemUoKS5oZWlnaHQoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7Ci0gICAg
ICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworICAgICAg
ICBidWZmZXIuc2V0U3RhdHVzKERlY29kZWRJbWFnZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgYnVmZmVyLnNldENvbG9yUHJvZmls
ZShtX2NvbG9yUHJvZmlsZSk7CiAKQEAgLTUxMyw3ICs1MTMsNyBAQCB2b2lkIEpQRUdJbWFnZURl
Y29kZXI6OmpwZWdDb21wbGV0ZSgpCiAKICAgICAvLyBIYW5kIGJhY2sgYW4gYXBwcm9wcmlhdGVs
eSBzaXplZCBidWZmZXIsIGV2ZW4gaWYgdGhlIGltYWdlIGVuZGVkIHVwIGJlaW5nCiAgICAgLy8g
ZW1wdHkuCi0gICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6
OkZyYW1lQ29tcGxldGUpOworICAgIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zZXRTdGF0dXMoRGVj
b2RlZEltYWdlOjpGcmFtZUNvbXBsZXRlKTsKIH0KIAogdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUoYm9vbCBvbmx5U2l6ZSkKQEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIEpQRUdJbWFnZURl
Y29kZXI6OmRlY29kZShib29sIG9ubHlTCiAgICAgICAgIHNldEZhaWxlZCgpOwogICAgIC8vIElm
IHdlJ3JlIGRvbmUgZGVjb2RpbmcgdGhlIGltYWdlLCB3ZSBkb24ndCBuZWVkIHRoZSBKUEVHSW1h
Z2VSZWFkZXIKICAgICAvLyBhbnltb3JlLiAgKElmIHdlIGZhaWxlZCwgfG1fcmVhZGVyfCBoYXMg
YWxyZWFkeSBiZWVuIGNsZWFyZWQuKQotICAgIGVsc2UgaWYgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUu
aXNFbXB0eSgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVm
ZmVyOjpGcmFtZUNvbXBsZXRlKSkKKyAgICBlbHNlIGlmICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlz
RW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0YXR1cygpID09IERlY29kZWRJbWFn
ZTo6RnJhbWVDb21wbGV0ZSkpCiAgICAgICAgIG1fcmVhZGVyLmNsZWFyKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAianBn
IjsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwotICAg
ICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRl
eCk7CisgICAgICAgIHZpcnR1YWwgRGVjb2RlZEltYWdlKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6
ZV90IGluZGV4KTsKICAgICAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzQWxwaGEoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVz
IHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBk
ZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdl
RGVjb2Rlck9wZW5WRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0ltYWdlRGVjb2Rlck9wZW5WRy5jcHAJKHJldmlzaW9uIDc1
NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvb3BlbnZnL0lt
YWdlRGVjb2Rlck9wZW5WRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1OYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3
TmF0aXZlSW1hZ2UoKSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgRGVjb2RlZEltYWdlOjphc05ld05h
dGl2ZUltYWdlKCkgY29uc3QKIHsKICAgICBzdGF0aWMgY29uc3QgVkdJbWFnZUZvcm1hdCBidWZm
ZXJGb3JtYXQgPSBWR19zQVJHQl84ODg4X1BSRTsKICAgICAvLyBTYXZlIG1lbW9yeSBieSB1c2lu
ZyAxNi1iaXQgaW1hZ2VzIGZvciBmdWxseSBvcGFxdWUgaW1hZ2VzLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNp
Z25lZCB3CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJHQkEzMkJ1ZmZlciogUE5HSW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQorRGVjb2RlZEltYWdlKiBQTkdJ
bWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYg
KGluZGV4KQogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNyw4ICsyMDcsOCBAQCBSR0JBMzJCdWZm
ZXIqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmCiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNo
ZVswXS5zZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgfQogCi0g
ICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKLSAgICBpZiAo
ZnJhbWUuc3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQorICAgIERlY29k
ZWRJbWFnZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgaWYgKGZyYW1lLnN0
YXR1cygpICE9IERlY29kZWRJbWFnZTo6RnJhbWVDb21wbGV0ZSkKICAgICAgICAgZGVjb2RlKGZh
bHNlKTsKICAgICByZXR1cm4gJmZyYW1lOwogfQpAQCAtMzMwLDEzICszMzAsMTMgQEAgdm9pZCBQ
TkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgICAgICByZXR1cm47CiAKICAg
ICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCi0gICAgUkdCQTMyQnVm
ZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKGJ1ZmZlci5zdGF0
dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKKyAgICBEZWNvZGVkSW1hZ2UmIGJ1
ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09
IERlY29kZWRJbWFnZTo6RnJhbWVFbXB0eSkgewogICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXpl
KHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKSB7CiAgICAgICAg
ICAgICBsb25nam1wKEpNUEJVRihtX3JlYWRlci0+cG5nUHRyKCkpLCAxKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZl
cjo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhEZWNvZGVkSW1hZ2U6
OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAg
ICAgIGJ1ZmZlci5zZXRDb2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUpOwogCkBAIC00MTAsNyAr
NDEwLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogdm9pZCBQ
TkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKCkKIHsKICAgICBpZiAoIW1fZnJhbWVCdWZmZXJD
YWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNldFN0
YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworICAgICAgICBtX2ZyYW1lQnVmZmVy
Q2FjaGUuZmlyc3QoKS5zZXRTdGF0dXMoRGVjb2RlZEltYWdlOjpGcmFtZUNvbXBsZXRlKTsKIH0K
IAogdm9pZCBQTkdJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDcgKzQzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuICJwbmciOyB9CiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFpbGFibGUoKTsKICAgICAgICAgdmlydHVhbCBib29s
IHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7Ci0gICAgICAgIHZpcnR1
YWwgUkdCQTMyQnVmZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyAgICAg
ICAgdmlydHVhbCBEZWNvZGVkSW1hZ2UqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
OwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBC
ZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwg
ZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQogICAgICAgICAvLyBQTkdJ
bWFnZVJlYWRlciEKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAhbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZp
cnN0KCkuc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAg
ICAgIHJldHVybiAhbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZl
ckNhY2hlLmZpcnN0KCkuc3RhdHVzKCkgPT0gRGVjb2RlZEltYWdlOjpGcmFtZUNvbXBsZXRlKTsK
ICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3F0L0RlY29kZWRJbWFnZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9EZWNvZGVkSW1hZ2VRdC5jcHAJ
KHJldmlzaW9uIDc1NzA1KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHA6NzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9EZWNvZGVkSW1hZ2VRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIw
MDkgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNv
ZGVyLmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8UVBpeG1h
cD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JHQkEzMkJ1
ZmZlcjo6UkdCQTMyQnVmZmVyKCkKKyAgICA6IG1faGFzQWxwaGEoZmFsc2UpIAorICAgICwgbV9z
aXplKCkKKyAgICAsIG1fc3RhdHVzKEZyYW1lRW1wdHkpCisgICAgLCBtX2R1cmF0aW9uKDApCisg
ICAgLCBtX2Rpc3Bvc2FsTWV0aG9kKERpc3Bvc2VOb3RTcGVjaWZpZWQpCit7Cit9CisKK1JHQkEz
MkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhl
cikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKwor
ICAgIGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKKyAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7Cisg
ICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKKyAgICBzZXREdXJhdGlvbihvdGhlci5kdXJh
dGlvbigpKTsKKyAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsK
KyAgICByZXR1cm4gKnRoaXM7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCit7Cisg
ICAgbV9waXhtYXAgPSBRUGl4bWFwKCk7CisgICAgbV9pbWFnZSA9IFFJbWFnZSgpOworICAgIG1f
c3RhdHVzID0gRnJhbWVFbXB0eTsKKyAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVt
YmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKQorICAgIC8vIGNhbGxzIHRoaXMgdG8g
ZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQorICAgIC8vIGlu
aXRGcmFtZUJ1ZmZlcigpIGFuZCBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVh
ZAorICAgIC8vIG90aGVyIG1ldGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgorfQorCit2
b2lkIFJHQkEzMkJ1ZmZlcjo6emVyb0ZpbGwoKQoreworICAgIGlmIChtX3BpeG1hcC5pc051bGwo
KSAmJiAhbV9pbWFnZS5pc051bGwoKSkgeworICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAobV9p
bWFnZS53aWR0aCgpLCBtX2ltYWdlLmhlaWdodCgpKTsKKyAgICAgICAgbV9pbWFnZSA9IFFJbWFn
ZSgpOworICAgIH0KKyAgICBtX3BpeG1hcC5maWxsKFFDb2xvcigwLCAwLCAwLCAwKSk7Cit9CisK
K2Jvb2wgUkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90
aGVyKQoreworICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBtX2ltYWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICBtX3BpeG1hcCA9IG90aGVyLm1fcGl4
bWFwOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX2hhc0FscGhhID0gb3RoZXIu
bV9oYXNBbHBoYTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6OnNl
dFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQoreworICAgIC8vIFRoaXMgZnVuY3Rp
b24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UsIGl0IHdpbGwgbGVhayBtZW1vcnkKKyAgICAv
LyBvdGhlcndpc2UuCisgICAgQVNTRVJUKHdpZHRoKCkgPT0gMCAmJiBoZWlnaHQoKSA9PSAwKTsK
KworICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisgICAgbV9pbWFn
ZSA9IFFJbWFnZSgpOworICAgIG1fcGl4bWFwID0gUVBpeG1hcChuZXdXaWR0aCwgbmV3SGVpZ2h0
KTsKKyAgICBpZiAobV9waXhtYXAuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIFplcm8gdGhlIGltYWdlLgorICAgIHplcm9GaWxsKCk7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworUVBpeG1hcCogUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QK
K3sKKyAgICBpZiAobV9waXhtYXAuaXNOdWxsKCkgJiYgIW1faW1hZ2UuaXNOdWxsKCkpIHsKKyAg
ICAgICAgbV9waXhtYXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UobV9pbWFnZSk7CisgICAgICAgIG1f
aW1hZ2UgPSBRSW1hZ2UoKTsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBRUGl4bWFwKG1fcGl4bWFw
KTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9oYXNBbHBoYTsKK30KKwordm9pZCBSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKGJvb2wg
YWxwaGEpCit7CisgICAgbV9oYXNBbHBoYSA9IGFscGhhOworfQorCit2b2lkIFJHQkEzMkJ1ZmZl
cjo6c2V0Q29sb3JQcm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMo
RnJhbWVTdGF0dXMgc3RhdHVzKQoreworICAgIG1fc3RhdHVzID0gc3RhdHVzOworfQorCisvLyBU
aGUgaW1hZ2UgbXVzdCBub3QgaGF2ZSBmb3JtYXQgODg4OCBwcmUgbXVsdGlwbGllZC4uLgordm9p
ZCBSR0JBMzJCdWZmZXI6OnNldFBpeG1hcChjb25zdCBRUGl4bWFwJiBwaXhtYXApCit7CisgICAg
bV9waXhtYXAgPSBwaXhtYXA7CisgICAgbV9pbWFnZSA9IFFJbWFnZSgpOworICAgIG1fc2l6ZSA9
IHBpeG1hcC5zaXplKCk7CisgICAgbV9oYXNBbHBoYSA9IHBpeG1hcC5oYXNBbHBoYUNoYW5uZWwo
KTsKK30KKworaW50IFJHQkEzMkJ1ZmZlcjo6d2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBt
X3NpemUud2lkdGgoKTsKK30KKworaW50IFJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9zaXplLmhlaWdodCgpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9EZWNvZGVkSW1hZ2VRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvRGVjb2RlZElt
YWdlUXQuY3BwCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3F0L0RlY29kZWRJbWFnZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJHQkEzMkJ1ZmZlcjo6UkdCQTMy
QnVmZmVyKCkKK0RlY29kZWRJbWFnZTo6RGVjb2RlZEltYWdlKCkKICAgICA6IG1faGFzQWxwaGEo
ZmFsc2UpIAogICAgICwgbV9zaXplKCkKICAgICAsIG1fc3RhdHVzKEZyYW1lRW1wdHkpCkBAIC00
NCw3ICs0NCw3IEBAIFJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKCkKIHsKIH0KIAotUkdCQTMy
QnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVy
KQorRGVjb2RlZEltYWdlJiBEZWNvZGVkSW1hZ2U6Om9wZXJhdG9yPShjb25zdCBEZWNvZGVkSW1h
Z2UmIG90aGVyKQogewogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuICp0
aGlzOwpAQCAtNTcsNyArNTcsNyBAQCBSR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0
b3I9KGNvCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi12b2lkIFJHQkEzMkJ1ZmZlcjo6Y2xlYXIo
KQordm9pZCBEZWNvZGVkSW1hZ2U6OmNsZWFyKCkKIHsKICAgICBtX3BpeG1hcCA9IFFQaXhtYXAo
KTsKICAgICBtX2ltYWdlID0gUUltYWdlKCk7CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgUkdCQTMy
QnVmZmVyOjpjbGVhcigpCiAgICAgLy8gb3RoZXIgbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUg
bGF0ZXIuCiB9CiAKLXZvaWQgUkdCQTMyQnVmZmVyOjp6ZXJvRmlsbCgpCit2b2lkIERlY29kZWRJ
bWFnZTo6emVyb0ZpbGwoKQogewogICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSAmJiAhbV9pbWFn
ZS5pc051bGwoKSkgewogICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAobV9pbWFnZS53aWR0aCgp
LCBtX2ltYWdlLmhlaWdodCgpKTsKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBSR0JBMzJCdWZmZXI6
Onplcm9GaWxsKCkKICAgICBtX3BpeG1hcC5maWxsKFFDb2xvcigwLCAwLCAwLCAwKSk7CiB9CiAK
LWJvb2wgUkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90
aGVyKQorYm9vbCBEZWNvZGVkSW1hZ2U6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IERlY29kZWRJbWFn
ZSYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBSR0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNv
bnN0IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShp
bnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCitib29sIERlY29kZWRJbWFnZTo6c2V0U2l6ZShp
bnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91
bGQgb25seSBiZSBjYWxsZWQgb25jZSwgaXQgd2lsbCBsZWFrIG1lbW9yeQogICAgIC8vIG90aGVy
d2lzZS4KQEAgLTEwNyw3ICsxMDcsNyBAQCBib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQg
bmV3V2lkdGgsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVFQaXhtYXAqIFJHQkEzMkJ1ZmZlcjo6
YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0CitRUGl4bWFwKiBEZWNvZGVkSW1hZ2U6OmFzTmV3TmF0
aXZlSW1hZ2UoKSBjb25zdAogewogICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSAmJiAhbV9pbWFn
ZS5pc051bGwoKSkgewogICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXA6OmZyb21JbWFnZShtX2lt
YWdlKTsKQEAgLTExNiwyOCArMTE2LDI4IEBAIFFQaXhtYXAqIFJHQkEzMkJ1ZmZlcjo6YXNOZXdO
YXRpdmVJbWFnZSgKICAgICByZXR1cm4gbmV3IFFQaXhtYXAobV9waXhtYXApOwogfQogCi1ib29s
IFJHQkEzMkJ1ZmZlcjo6aGFzQWxwaGEoKSBjb25zdAorYm9vbCBEZWNvZGVkSW1hZ2U6Omhhc0Fs
cGhhKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9oYXNBbHBoYTsKIH0KIAotdm9pZCBSR0JBMzJC
dWZmZXI6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCit2b2lkIERlY29kZWRJbWFnZTo6c2V0SGFz
QWxwaGEoYm9vbCBhbHBoYSkKIHsKICAgICBtX2hhc0FscGhhID0gYWxwaGE7CiB9CiAKLXZvaWQg
UkdCQTMyQnVmZmVyOjpzZXRDb2xvclByb2ZpbGUoY29uc3QgQ29sb3JQcm9maWxlJiBjb2xvclBy
b2ZpbGUpCit2b2lkIERlY29kZWRJbWFnZTo6c2V0Q29sb3JQcm9maWxlKGNvbnN0IENvbG9yUHJv
ZmlsZSYgY29sb3JQcm9maWxlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQg
UkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQordm9pZCBEZWNvZGVk
SW1hZ2U6OnNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpCiB7CiAgICAgbV9zdGF0dXMgPSBz
dGF0dXM7CiB9CiAKIC8vIFRoZSBpbWFnZSBtdXN0IG5vdCBoYXZlIGZvcm1hdCA4ODg4IHByZSBt
dWx0aXBsaWVkLi4uCi12b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0UGl4bWFwKGNvbnN0IFFQaXhtYXAm
IHBpeG1hcCkKK3ZvaWQgRGVjb2RlZEltYWdlOjpzZXRQaXhtYXAoY29uc3QgUVBpeG1hcCYgcGl4
bWFwKQogewogICAgIG1fcGl4bWFwID0gcGl4bWFwOwogICAgIG1faW1hZ2UgPSBRSW1hZ2UoKTsK
QEAgLTE0NSwxMiArMTQ1LDEyIEBAIHZvaWQgUkdCQTMyQnVmZmVyOjpzZXRQaXhtYXAoY29uc3Qg
UVBpeG0KICAgICBtX2hhc0FscGhhID0gcGl4bWFwLmhhc0FscGhhQ2hhbm5lbCgpOwogfQogCi1p
bnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0CitpbnQgRGVjb2RlZEltYWdlOjp3aWR0aCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOwogfQogCi1pbnQgUkdCQTMyQnVm
ZmVyOjpoZWlnaHQoKSBjb25zdAoraW50IERlY29kZWRJbWFnZTo6aGVpZ2h0KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9zaXplLmhlaWdodCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L1JHQkEzMkJ1ZmZlclF0
LmNwcAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMTU4ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xlLCBJ
bmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0KLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaW5jbHVkZSA8UVBpeG1hcD4KLSNpbmNsdWRl
IDxzdGRpby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJHQkEzMkJ1ZmZlcjo6UkdCQTMy
QnVmZmVyKCkKLSAgICA6IG1faGFzQWxwaGEoZmFsc2UpIAotICAgICwgbV9zaXplKCkKLSAgICAs
IG1fc3RhdHVzKEZyYW1lRW1wdHkpCi0gICAgLCBtX2R1cmF0aW9uKDApCi0gICAgLCBtX2Rpc3Bv
c2FsTWV0aG9kKERpc3Bvc2VOb3RTcGVjaWZpZWQpCi17Ci19Ci0KLVJHQkEzMkJ1ZmZlciYgUkdC
QTMyQnVmZmVyOjpvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKLXsKLSAgICBp
ZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIGNvcHlCaXRt
YXBEYXRhKG90aGVyKTsKLSAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7Ci0gICAgc2V0U3RhdHVz
KG90aGVyLnN0YXR1cygpKTsKLSAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKLSAg
ICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLXZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCi17Ci0gICAgbV9waXhtYXAg
PSBRUGl4bWFwKCk7Ci0gICAgbV9pbWFnZSA9IFFJbWFnZSgpOwotICAgIG1fc3RhdHVzID0gRnJh
bWVFbXB0eTsKLSAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBj
bGVhckZyYW1lQnVmZmVyQ2FjaGUoKQotICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUgYml0
bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQotICAgIC8vIGluaXRGcmFtZUJ1ZmZl
cigpIGFuZCBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVhZAotICAgIC8vIG90
aGVyIG1ldGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgotfQotCi12b2lkIFJHQkEzMkJ1
ZmZlcjo6emVyb0ZpbGwoKQotewotICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSAmJiAhbV9pbWFn
ZS5pc051bGwoKSkgewotICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAobV9pbWFnZS53aWR0aCgp
LCBtX2ltYWdlLmhlaWdodCgpKTsKLSAgICAgICAgbV9pbWFnZSA9IFFJbWFnZSgpOwotICAgIH0K
LSAgICBtX3BpeG1hcC5maWxsKFFDb2xvcigwLCAwLCAwLCAwKSk7Ci19Ci0KLWJvb2wgUkdCQTMy
QnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQotewotICAg
IGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBtX2ltYWdl
ID0gb3RoZXIubV9pbWFnZTsKLSAgICBtX3BpeG1hcCA9IG90aGVyLm1fcGl4bWFwOwotICAgIG1f
c2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsK
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50IG5l
d1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9u
bHkgYmUgY2FsbGVkIG9uY2UsIGl0IHdpbGwgbGVhayBtZW1vcnkKLSAgICAvLyBvdGhlcndpc2Uu
Ci0gICAgQVNTRVJUKHdpZHRoKCkgPT0gMCAmJiBoZWlnaHQoKSA9PSAwKTsKLQotICAgIG1fc2l6
ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7Ci0gICAgbV9pbWFnZSA9IFFJbWFnZSgp
OwotICAgIG1fcGl4bWFwID0gUVBpeG1hcChuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLSAgICBpZiAo
bV9waXhtYXAuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIFplcm8g
dGhlIGltYWdlLgotICAgIHplcm9GaWxsKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotUVBp
eG1hcCogUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICBpZiAo
bV9waXhtYXAuaXNOdWxsKCkgJiYgIW1faW1hZ2UuaXNOdWxsKCkpIHsKLSAgICAgICAgbV9waXht
YXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UobV9pbWFnZSk7Ci0gICAgICAgIG1faW1hZ2UgPSBRSW1h
Z2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBRUGl4bWFwKG1fcGl4bWFwKTsKLX0KLQotYm9v
bCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9oYXNBbHBo
YTsKLX0KLQotdm9pZCBSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCi17Ci0g
ICAgbV9oYXNBbHBoYSA9IGFscGhhOwotfQotCi12b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0Q29sb3JQ
cm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQotewotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgUkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMg
c3RhdHVzKQotewotICAgIG1fc3RhdHVzID0gc3RhdHVzOwotfQotCi0vLyBUaGUgaW1hZ2UgbXVz
dCBub3QgaGF2ZSBmb3JtYXQgODg4OCBwcmUgbXVsdGlwbGllZC4uLgotdm9pZCBSR0JBMzJCdWZm
ZXI6OnNldFBpeG1hcChjb25zdCBRUGl4bWFwJiBwaXhtYXApCi17Ci0gICAgbV9waXhtYXAgPSBw
aXhtYXA7Ci0gICAgbV9pbWFnZSA9IFFJbWFnZSgpOwotICAgIG1fc2l6ZSA9IHBpeG1hcC5zaXpl
KCk7Ci0gICAgbV9oYXNBbHBoYSA9IHBpeG1hcC5oYXNBbHBoYUNoYW5uZWwoKTsKLX0KLQotaW50
IFJHQkEzMkJ1ZmZlcjo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3NpemUud2lkdGgo
KTsKLX0KLQotaW50IFJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9zaXplLmhlaWdodCgpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNvZGVyU2tp
YS5jcHAJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJHQkEzMkJ1ZmZlcjo6UkdCQTMy
QnVmZmVyKCkKK0RlY29kZWRJbWFnZTo6RGVjb2RlZEltYWdlKCkKICAgICA6IG1fc3RhdHVzKEZy
YW1lRW1wdHkpCiAgICAgLCBtX2R1cmF0aW9uKDApCiAgICAgLCBtX2Rpc3Bvc2FsTWV0aG9kKERp
c3Bvc2VOb3RTcGVjaWZpZWQpCkBAIC0zOSw3ICszOSw3IEBAIFJHQkEzMkJ1ZmZlcjo6UkdCQTMy
QnVmZmVyKCkKIHsKIH0KIAotUkdCQTMyQnVmZmVyJiBSR0JBMzJCdWZmZXI6Om9wZXJhdG9yPShj
b25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQorRGVjb2RlZEltYWdlJiBEZWNvZGVkSW1hZ2U6Om9w
ZXJhdG9yPShjb25zdCBEZWNvZGVkSW1hZ2UmIG90aGVyKQogewogICAgIGlmICh0aGlzID09ICZv
dGhlcikKICAgICAgICAgcmV0dXJuICp0aGlzOwpAQCAtNTYsNyArNTYsNyBAQCBSR0JBMzJCdWZm
ZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNvCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi12
b2lkIFJHQkEzMkJ1ZmZlcjo6Y2xlYXIoKQordm9pZCBEZWNvZGVkSW1hZ2U6OmNsZWFyKCkKIHsK
ICAgICBtX2JpdG1hcC5yZXNldCgpOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKQEAgLTY2
LDEyICs2NiwxMiBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6Y2xlYXIoKQogICAgIC8vIG90aGVyIG1l
dGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgogfQogCi12b2lkIFJHQkEzMkJ1ZmZlcjo6
emVyb0ZpbGwoKQordm9pZCBEZWNvZGVkSW1hZ2U6Onplcm9GaWxsKCkKIHsKICAgICBtX2JpdG1h
cC5lcmFzZUFSR0IoMCwgMCwgMCwgMCk7CiB9CiAKLWJvb2wgUkdCQTMyQnVmZmVyOjpjb3B5Qml0
bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQorYm9vbCBEZWNvZGVkSW1hZ2U6OmNv
cHlCaXRtYXBEYXRhKGNvbnN0IERlY29kZWRJbWFnZSYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMg
PT0gJm90aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBS
R0JBMzJCdWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IAogICAgIHJldHVybiBvdGhlckJpdG1h
cC5jb3B5VG8oJm1fYml0bWFwLCBvdGhlckJpdG1hcC5jb25maWcoKSk7CiB9CiAKLWJvb2wgUkdC
QTMyQnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKK2Jvb2wgRGVj
b2RlZEltYWdlOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKIHsKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLCBpdCB3aWxsIGxlYWsg
bWVtb3J5CiAgICAgLy8gb3RoZXJ3aXNlLgpAQCAtOTYsMzkgKzk2LDM5IEBAIGJvb2wgUkdCQTMy
QnVmZmVyOjpzZXRTaXplKGludCBuZXdXaWR0aCwKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotTmF0
aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKK05hdGl2
ZUltYWdlUHRyIERlY29kZWRJbWFnZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG5ldyBOYXRpdmVJbWFnZVNraWEobV9iaXRtYXApOwogfQogCi1ib29sIFJHQkEzMkJ1
ZmZlcjo6aGFzQWxwaGEoKSBjb25zdAorYm9vbCBEZWNvZGVkSW1hZ2U6Omhhc0FscGhhKCkgY29u
c3QKIHsKICAgICByZXR1cm4gIW1fYml0bWFwLmlzT3BhcXVlKCk7CiB9CiAKLXZvaWQgUkdCQTMy
QnVmZmVyOjpzZXRIYXNBbHBoYShib29sIGFscGhhKQordm9pZCBEZWNvZGVkSW1hZ2U6OnNldEhh
c0FscGhhKGJvb2wgYWxwaGEpCiB7CiAgICAgbV9iaXRtYXAuc2V0SXNPcGFxdWUoIWFscGhhKTsK
IH0KIAotdm9pZCBSR0JBMzJCdWZmZXI6OnNldENvbG9yUHJvZmlsZShjb25zdCBDb2xvclByb2Zp
bGUmIGNvbG9yUHJvZmlsZSkKK3ZvaWQgRGVjb2RlZEltYWdlOjpzZXRDb2xvclByb2ZpbGUoY29u
c3QgQ29sb3JQcm9maWxlJiBjb2xvclByb2ZpbGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAotdm9pZCBSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpCit2
b2lkIERlY29kZWRJbWFnZTo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cykKIHsKICAgICBt
X3N0YXR1cyA9IHN0YXR1czsKICAgICBpZiAobV9zdGF0dXMgPT0gRnJhbWVDb21wbGV0ZSkKICAg
ICAgICAgbV9iaXRtYXAuc2V0RGF0YUNvbXBsZXRlKCk7ICAvLyBUZWxsIHRoZSBiaXRtYXAgaXQn
cyBkb25lLgogfQogCi1pbnQgUkdCQTMyQnVmZmVyOjp3aWR0aCgpIGNvbnN0CitpbnQgRGVjb2Rl
ZEltYWdlOjp3aWR0aCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fYml0bWFwLndpZHRoKCk7CiB9
CiAKLWludCBSR0JBMzJCdWZmZXI6OmhlaWdodCgpIGNvbnN0CitpbnQgRGVjb2RlZEltYWdlOjpo
ZWlnaHQoKSBjb25zdAogewogICAgIHJldHVybiBtX2JpdG1hcC5oZWlnaHQoKTsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFp
bGFibGUoKTsKIH0KIAotUkdCQTMyQnVmZmVyKiBXRUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZl
ckF0SW5kZXgoc2l6ZV90IGluZGV4KQorRGVjb2RlZEltYWdlKiBXRUJQSW1hZ2VEZWNvZGVyOjpm
cmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCkKICAgICAg
ICAgcmV0dXJuIDA7CkBAIC02Myw4ICs2Myw4IEBAIFJHQkEzMkJ1ZmZlciogV0VCUEltYWdlRGVj
b2Rlcjo6ZnJhbWVCdWYKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnNldFByZW11bHRp
cGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKICAgICB9CiAKLSAgICBSR0JBMzJCdWZmZXIm
IGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAh
PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpCisgICAgRGVjb2RlZEltYWdlJiBmcmFtZSA9
IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gRGVjb2Rl
ZEltYWdlOjpGcmFtZUNvbXBsZXRlKQogICAgICAgICBkZWNvZGUoZmFsc2UpOwogICAgIHJldHVy
biAmZnJhbWU7CiB9CkBAIC05Niw4ICs5Niw4IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wgb25seVMKICAgICBpZiAoIWlzQWxsRGF0YVJlY2VpdmVkKCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIEFTU0VSVCghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSk7Ci0g
ICAgUkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYg
KGJ1ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKKyAgICBEZWNv
ZGVkSW1hZ2UmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICBpZiAoYnVmZmVy
LnN0YXR1cygpID09IERlY29kZWRJbWFnZTo6RnJhbWVFbXB0eSkgewogICAgICAgICBBU1NFUlQo
d2lkdGggPT0gc2l6ZSgpLndpZHRoKCkpOwogICAgICAgICBBU1NFUlQoaGVpZ2h0ID09IHNpemUo
KS5oZWlnaHQoKSk7CiAgICAgICAgIGlmICghYnVmZmVyLnNldFNpemUod2lkdGgsIGhlaWdodCkp
CkBAIC0xMTQsNyArMTE0LDcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBv
bmx5UwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpCiAgICAgICAgICAg
ICBidWZmZXIuc2V0UkdCQSh4LCB5LCBzcmNbYnl0ZXNQZXJQaXhlbCAqIHggKyAyXSwgc3JjW2J5
dGVzUGVyUGl4ZWwgKiB4ICsgMV0sIHNyY1tieXRlc1BlclBpeGVsICogeCArIDBdLCAweGZmKTsK
ICAgICB9Ci0gICAgYnVmZmVyLnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUp
OworICAgIGJ1ZmZlci5zZXRTdGF0dXMoRGVjb2RlZEltYWdlOjpGcmFtZUNvbXBsZXRlKTsKICAg
ICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgIGJ1ZmZlci5zZXRSZWN0KEludFJlY3Qo
SW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dF
QlBJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDEsNyArNDEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+V0VCUEltYWdlRGVjb2Rl
cigpOwogICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3QgeyByZXR1
cm4gInZwOCI7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7Ci0gICAgdmly
dHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOworICAg
IHZpcnR1YWwgRGVjb2RlZEltYWdlKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy93eC9JbWFnZURlY29kZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwCShyZXZpc2lvbiA3NTcw
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3d4L0ltYWdlRGVj
b2Rlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLU5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFn
ZSgpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBEZWNvZGVkSW1hZ2U6OmFzTmV3TmF0aXZlSW1hZ2Uo
KSBjb25zdAogewogICAgIHd4Qml0bWFwKiBibXAgPSBuZXcgd3hCaXRtYXAod2lkdGgoKSwgaGVp
Z2h0KCksIDMyKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>78861</attachid>
            <date>2011-01-13 15:07:11 -0800</date>
            <delta_ts>2011-01-13 15:54:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52363-20110113150709.patch</filename>
            <type>text/plain</type>
            <size>66954</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1NzQxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI1IEBACisyMDExLTAxLTEzICBBZGFtIEJh
cnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgUmVuYW1lIFJHQkEzMkJ1ZmZlciB0byBJbWFnZUZyYW1lCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjM2MworCisgICAg
ICAgIFJHQkEzMkJ1ZmZlciBpcyBhIHRlcnJpYmxlIG1pc25vbWVyLiAgSW1hZ2VGcmFtZSBpcyB2
YXN0bHkKKyAgICAgICAgbW9yZSBhY2N1cmF0ZS4gIE1vcmUgY2xlYW51cCB0byBjb21lLgorCisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VT
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lQXRJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZVNvdXJjZTo6ZnJhbWVEdXJhdGlvbkF0SW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VTb3VyY2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5k
ZXgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2RlclF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlclF0OjpmcmFtZUJ1ZmZlckF0SW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyUXQ6OmludGVybmFsUmVhZEltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2RlclF0OjppbnRlcm5hbEhhbmRsZUN1cnJlbnRJbWFn
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9JbWFnZVdpbkNFLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpJbWFnZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9w
ZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpjb3B5UmVmZXJlbmNlVG9CaXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzQWxwaGEpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6c2V0Q29sb3JQcm9maWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNldFN0YXR1cyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6SW1hZ2VGcmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Ym1wL0JNUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZURlY29k
ZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJ
bWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6ZGVjb2Rl
Qk1QKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpzZXRCdWZmZXIpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2RlckNHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFB0ckFzUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNvcHlSZWZlcmVuY2VUb0JpdG1hcERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUlt
YWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJB
dEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJGcmFtZUJ1
ZmZlckNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29k
ZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNw
cDoKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAgICAgKEdJRkZyYW1lUmVh
ZGVyOjpHSUZGcmFtZVJlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
aGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
aWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29k
ZXI6OmRlY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0lt
YWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpm
cmFtZUJ1ZmZlckF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6
b3V0cHV0U2NhbmxpbmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Ompw
ZWdDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL29wZW52Zy9JbWFnZURlY29k
ZXJPcGVuVkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJ
bWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVj
b2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVy
QXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmlzQ29tcGxldGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHA6IENvcGllZCBmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L1JHQkEzMkJ1ZmZlclF0
LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OkltYWdlRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxs
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRIYXNBbHBoYSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRDb2xvclByb2ZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OnNldFBpeG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L1JHQkEzMkJ1ZmZlclF0LmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGwpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhh
c0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldEhhc0FscGhhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldENvbG9yUHJvZmlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTdGF0dXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGVpZ2h0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmg6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSk6CisKIDIwMTEtMDEt
MTIgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJ1c3NlbGwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNzU3MDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpAQCAtMTE3OSw3ICsxMTc5
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHAgXAogICAgIHBs
YXRmb3JtL0ZpbGVTeXN0ZW0uY3BwIFwKICAgICBwbGF0Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2Uu
Y3BwIFwKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHAg
XAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAgXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250
RmFtaWx5LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VTb3VyY2UuY3BwCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDgg
KzEzMCw4IEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZUEKICAgICBp
ZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSR0JBMzJCdWZmZXIqIGJ1
ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGluZGV4KTsKLSAgICBpZiAoIWJ1
ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkKKyAg
ICBJbWFnZUZyYW1lKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRl
eCk7CisgICAgaWYgKCFidWZmZXIgfHwgYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIFplcm8taGVpZ2h0IGltYWdl
cyBjYW4gY2F1c2UgcHJvYmxlbXMgZm9yIHNvbWUgcG9ydHMuICBJZiB3ZSBoYXZlIGFuCkBAIC0x
NDksOCArMTQ5LDggQEAgZmxvYXQgSW1hZ2VTb3VyY2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KAog
ICAgIGlmICghbV9kZWNvZGVyKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFJHQkEzMkJ1ZmZl
ciogYnVmZmVyID0gbV9kZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwotICAgIGlm
ICghYnVmZmVyIHx8IGJ1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5
KQorICAgIEltYWdlRnJhbWUqIGJ1ZmZlciA9IG1fZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
KGluZGV4KTsKKyAgICBpZiAoIWJ1ZmZlciB8fCBidWZmZXItPnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gTWFueSBhbm5veWlu
ZyBhZHMgc3BlY2lmeSBhIDAgZHVyYXRpb24gdG8gbWFrZSBhbiBpbWFnZSBmbGFzaCBhcyBxdWlj
a2x5IGFzIHBvc3NpYmxlLgpAQCAtMTgwLDggKzE4MCw4IEBAIGJvb2wgSW1hZ2VTb3VyY2U6OmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgKICAgICBpZiAoIW1fZGVjb2RlcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgUkdCQTMyQnVmZmVyKiBidWZmZXIgPSBtX2RlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7Ci0gICAgcmV0dXJuIGJ1ZmZlciAmJiBidWZmZXItPnN0YXR1cygp
ID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZTsKKyAgICBJbWFnZUZyYW1lKiBidWZmZXIg
PSBtX2RlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7CisgICAgcmV0dXJuIGJ1ZmZl
ciAmJiBidWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGU7CiB9CiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlRGVjb2Rl
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZURlY29kZXJRdC5jcHAJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzEsNyArMTMxLDcgQEAgU3RyaW5nIEltYWdlRGVjb2RlclF0OjpmaWxlbmFtZUV4dGVuc2lv
bgogICAgIHJldHVybiBTdHJpbmcobV9mb3JtYXQuY29uc3REYXRhKCksIG1fZm9ybWF0Lmxlbmd0
aCgpKTsKIH07CiAKLVJHQkEzMkJ1ZmZlciogSW1hZ2VEZWNvZGVyUXQ6OmZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpCitJbWFnZUZyYW1lKiBJbWFnZURlY29kZXJRdDo6ZnJhbWVCdWZm
ZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICAvLyBJbiBjYXNlIHRoZSBJbWFnZURlY29k
ZXJRdCBnb3QgcmVjcmVhdGVkIHdlIGRvbid0IGtub3cKICAgICAvLyB5ZXQgaG93IG1hbnkgaW1h
Z2VzIHdlIGFyZSBnb2luZyB0byBoYXZlIGFuZCBuZWVkIHRvCkBAIC0xNDUsOCArMTQ1LDggQEAg
UkdCQTMyQnVmZmVyKiBJbWFnZURlY29kZXJRdDo6ZnJhbWVCdWZmZQogICAgIGlmIChpbmRleCA+
PSBjb3VudCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0g
bV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKLSAgICBpZiAoZnJhbWUuc3RhdHVzKCkgIT0gUkdC
QTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlICYmIG1fcmVhZGVyKQorICAgIEltYWdlRnJhbWUmIGZy
YW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKKyAgICBpZiAoZnJhbWUuc3RhdHVzKCkg
IT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSAmJiBtX3JlYWRlcikKICAgICAgICAgaW50ZXJu
YWxSZWFkSW1hZ2UoaW5kZXgpOwogICAgIHJldHVybiAmZnJhbWU7CiB9CkBAIC0xODUsNyArMTg1
LDcgQEAgdm9pZCBJbWFnZURlY29kZXJRdDo6aW50ZXJuYWxSZWFkSW1hZ2UocwogCiAgICAgLy8g
QXR0ZW1wdCB0byByZXR1cm4gc29tZSBtZW1vcnkKICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
ZnJhbWVCdWZmZXJDYWNoZS5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAobV9mcmFtZUJ1ZmZl
ckNhY2hlW2ldLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKKyAgICAg
ICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZVtpXS5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFt
ZUNvbXBsZXRlKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjExLDEwICsyMTEs
MTAgQEAgYm9vbCBJbWFnZURlY29kZXJRdDo6aW50ZXJuYWxIYW5kbGVDdXJyZQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgLy8gbm93IGludG8gdGhlIFJHQkEzMkJ1ZmZlciAt
IGV2ZW4gaWYgdGhlIGltYWdlIGlzIG5vdAotICAgIFJHQkEzMkJ1ZmZlciogY29uc3QgYnVmZmVy
ID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKKyAgICAvLyBub3cgaW50byB0aGUg
SW1hZ2VGcmFtZSAtIGV2ZW4gaWYgdGhlIGltYWdlIGlzIG5vdAorICAgIEltYWdlRnJhbWUqIGNv
bnN0IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CiAgICAgYnVmZmVy
LT5zZXRSZWN0KG1fcmVhZGVyLT5jdXJyZW50SW1hZ2VSZWN0KCkpOwotICAgIGJ1ZmZlci0+c2V0
U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CisgICAgYnVmZmVyLT5zZXRTdGF0
dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CiAgICAgYnVmZmVyLT5zZXREdXJhdGlvbiht
X3JlYWRlci0+bmV4dEltYWdlRGVsYXkoKSk7CiAgICAgYnVmZmVyLT5zZXRQaXhtYXAocGl4bWFw
KTsKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ltYWdlRGVjb2RlclF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VEZWNvZGVyUXQuaAkocmV2aXNpb24gNzU3MDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZURlY29kZXJRdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNT
aXplQXZhaWxhYmxlKCk7CiAgICAgdmlydHVhbCBzaXplX3QgZnJhbWVDb3VudCgpOwogICAgIHZp
cnR1YWwgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUkdCQTMyQnVm
ZmVyKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KTsKKyAgICB2aXJ0dWFsIEltYWdl
RnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwogCiAgICAgdmlydHVhbCBT
dHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdDsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1hZ2VXaW5DRS5jcHAJKHJldmlz
aW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvSW1h
Z2VXaW5DRS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1OYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1h
Z2UoKSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIFNoYXJlZEJpdG1hcDo6Y3JlYXRlKG1fYmFja2luZ1N0b3Jl
LCBtX3NpemUsIGhhc0FscGhhKCkpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3
NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVj
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw3ICsxMDMsNyBAQCBJbWFnZURlY29kZXIq
IEltYWdlRGVjb2Rlcjo6Y3JlYXRlKGNvbnN0CiAKICNpZiAhUExBVEZPUk0oU0tJQSkKIAotUkdC
QTMyQnVmZmVyOjpSR0JBMzJCdWZmZXIoKQorSW1hZ2VGcmFtZTo6SW1hZ2VGcmFtZSgpCiAgICAg
OiBtX2hhc0FscGhhKGZhbHNlKQogICAgICwgbV9zdGF0dXMoRnJhbWVFbXB0eSkKICAgICAsIG1f
ZHVyYXRpb24oMCkKQEAgLTExMiw3ICsxMTIsNyBAQCBSR0JBMzJCdWZmZXI6OlJHQkEzMkJ1ZmZl
cigpCiB7CiB9IAogCi1SR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9KGNvbnN0
IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCitJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0o
Y29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAg
ICAgICByZXR1cm4gKnRoaXM7CkBAIC0xMjYsNyArMTI2LDcgQEAgUkdCQTMyQnVmZmVyJiBSR0JB
MzJCdWZmZXI6Om9wZXJhdG9yPShjbwogICAgIHJldHVybiAqdGhpczsKIH0KIAotdm9pZCBSR0JB
MzJCdWZmZXI6OmNsZWFyKCkKK3ZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXIoKQogewogICAgIG1fYmFj
a2luZ1N0b3JlLmNsZWFyKCk7CiAgICAgbV9ieXRlcyA9IDA7CkBAIC0xMzcsNyArMTM3LDcgQEAg
dm9pZCBSR0JBMzJCdWZmZXI6OmNsZWFyKCkKICAgICAvLyBsYXRlci4KIH0KIAotdm9pZCBSR0JB
MzJCdWZmZXI6Onplcm9GaWxsKCkKK3ZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGwoKQogewogICAg
IG1lbXNldChtX2J5dGVzLCAwLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNp
emVvZihQaXhlbERhdGEpKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKQEAgLTE0NSwxMyArMTQ1
LDEzIEBAIHZvaWQgUkdCQTMyQnVmZmVyOjp6ZXJvRmlsbCgpCiAKICNpZiAhUExBVEZPUk0oQ0cp
CiAKLXZvaWQgUkdCQTMyQnVmZmVyOjpjb3B5UmVmZXJlbmNlVG9CaXRtYXBEYXRhKGNvbnN0IFJH
QkEzMkJ1ZmZlciYgb3RoZXIpCit2b2lkIEltYWdlRnJhbWU6OmNvcHlSZWZlcmVuY2VUb0JpdG1h
cERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiB7CiAgICAgQVNTRVJUKHRoaXMgIT0gJm90
aGVyKTsKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7CiB9CiAKLWJvb2wgUkdCQTMyQnVmZmVy
Ojpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQorYm9vbCBJbWFnZUZy
YW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKIHsKICAgICBpZiAo
dGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTYzLDcgKzE2Myw3IEBA
IGJvb2wgUkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCAKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3
SGVpZ2h0KQorYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hl
aWdodCkKIHsKICAgICAvLyBOT1RFOiBUaGlzIGhhcyBubyB3YXkgdG8gY2hlY2sgZm9yIGFsbG9j
YXRpb24gZmFpbHVyZSBpZiB0aGUgcmVxdWVzdGVkCiAgICAgLy8gc2l6ZSB3YXMgdG9vIGJpZy4u
LgpAQCAtMTc5LDMyICsxNzksMzIgQEAgYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50IG5l
d1dpZHRoLAogCiAjZW5kaWYKIAotYm9vbCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29uc3QK
K2Jvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdAogewogICAgIHJldHVybiBtX2hhc0Fs
cGhhOwogfQogCi12b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKK3Zv
aWQgSW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKIHsKICAgICBtX2hhc0FscGhh
ID0gYWxwaGE7CiB9CiAKLXZvaWQgUkdCQTMyQnVmZmVyOjpzZXRDb2xvclByb2ZpbGUoY29uc3Qg
Q29sb3JQcm9maWxlJiBjb2xvclByb2ZpbGUpCit2b2lkIEltYWdlRnJhbWU6OnNldENvbG9yUHJv
ZmlsZShjb25zdCBDb2xvclByb2ZpbGUmIGNvbG9yUHJvZmlsZSkKIHsKICAgICBtX2NvbG9yUHJv
ZmlsZSA9IGNvbG9yUHJvZmlsZTsKIH0KIAotdm9pZCBSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyhG
cmFtZVN0YXR1cyBzdGF0dXMpCit2b2lkIEltYWdlRnJhbWU6OnNldFN0YXR1cyhGcmFtZVN0YXR1
cyBzdGF0dXMpCiB7CiAgICAgbV9zdGF0dXMgPSBzdGF0dXM7CiB9CiAKLWludCBSR0JBMzJCdWZm
ZXI6OndpZHRoKCkgY29uc3QKK2ludCBJbWFnZUZyYW1lOjp3aWR0aCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fc2l6ZS53aWR0aCgpOwogfQogCi1pbnQgUkdCQTMyQnVmZmVyOjpoZWlnaHQoKSBj
b25zdAoraW50IEltYWdlRnJhbWU6OmhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fc2l6
ZS5oZWlnaHQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSwxMCArNDksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEZJ
WE1FOiBEbyB3ZSB3YW50IGJldHRlciBlbmNhcHN1bGF0aW9uPwogICAgIHR5cGVkZWYgVmVjdG9y
PGNoYXI+IENvbG9yUHJvZmlsZTsKIAotICAgIC8vIFRoZSBSR0JBMzJCdWZmZXIgb2JqZWN0IHJl
cHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YSBpbiBSR0JBMzIKKyAgICAvLyBUaGUgSW1h
Z2VGcmFtZSBvYmplY3QgcmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhIGluIFJHQkEz
MgogICAgIC8vIGZvcm1hdC4gIFRoaXMgYnVmZmVyIGlzIHdoYXQgYWxsIGRlY29kZXJzIHdyaXRl
IGEgc2luZ2xlIGZyYW1lIGludG8uCiAgICAgLy8gRnJhbWVzIGFyZSB0aGVuIGluc3RhbnRpYXRl
ZCBmb3IgZHJhd2luZyBieSBiZWluZyBoYW5kZWQgdGhpcyBidWZmZXIuCi0gICAgY2xhc3MgUkdC
QTMyQnVmZmVyIHsKKyAgICBjbGFzcyBJbWFnZUZyYW1lIHsKICAgICBwdWJsaWM6CiAgICAgICAg
IGVudW0gRnJhbWVTdGF0dXMgeyBGcmFtZUVtcHR5LCBGcmFtZVBhcnRpYWwsIEZyYW1lQ29tcGxl
dGUgfTsKICAgICAgICAgZW51bSBGcmFtZURpc3Bvc2FsTWV0aG9kIHsKQEAgLTcxLDEzICs3MSwx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxE
YXRhOwogI2VuZGlmCiAKLSAgICAgICAgUkdCQTMyQnVmZmVyKCk7CisgICAgICAgIEltYWdlRnJh
bWUoKTsKIAotICAgICAgICBSR0JBMzJCdWZmZXIoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikg
eyBvcGVyYXRvcj0ob3RoZXIpOyB9CisgICAgICAgIEltYWdlRnJhbWUoY29uc3QgSW1hZ2VGcmFt
ZSYgb3RoZXIpIHsgb3BlcmF0b3I9KG90aGVyKTsgfQogCiAgICAgICAgIC8vIEZvciBiYWNrZW5k
cyB3aGljaCByZWZjb3VudCB0aGVpciBkYXRhLCB0aGlzIG9wZXJhdG9yIGRvZXNuJ3QgbmVlZCB0
bwogICAgICAgICAvLyBjcmVhdGUgYSBuZXcgY29weSBvZiB0aGUgaW1hZ2UgZGF0YSwgb25seSBp
bmNyZWFzZSB0aGUgcmVmIGNvdW50LgotICAgICAgICBSR0JBMzJCdWZmZXImIG9wZXJhdG9yPShj
b25zdCBSR0JBMzJCdWZmZXImIG90aGVyKTsKKyAgICAgICAgSW1hZ2VGcmFtZSYgb3BlcmF0b3I9
KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKTsKIAogICAgICAgICAvLyBEZWxldGVzIHRoZSBwaXhl
bCBkYXRhIGVudGlyZWx5OyB1c2VkIGJ5IEltYWdlRGVjb2RlciB0byBzYXZlIG1lbW9yeQogICAg
ICAgICAvLyB3aGVuIHdlIG5vIGxvbmdlciBuZWVkIHRvIGRpc3BsYXkgYSBmcmFtZSBhbmQgb25s
eSBuZWVkIGl0cyBtZXRhZGF0YS4KQEAgLTg4LDExICs4OCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICAgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb3B5IG9mIHRoZSBpbWFnZSBkYXRhIGlu
IHxvdGhlcnwsIHNvIHRoZSB0d28gaW1hZ2VzCiAgICAgICAgIC8vIGNhbiBiZSBtb2RpZmllZCBp
bmRlcGVuZGVudGx5LiAgUmV0dXJucyB3aGV0aGVyIHRoZSBjb3B5IHN1Y2NlZWRlZC4KLSAgICAg
ICAgYm9vbCBjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImKTsKKyAgICAgICAgYm9v
bCBjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJik7CiAKICAgICAgICAgLy8gQ3JlYXRl
cyBhIG5ldyByZWZlcmVuY2UgdG8gdGhlIGltYWdlIGRhdGEgaW4gfG90aGVyfC4gIFRoZSB0d28g
aW1hZ2VzCiAgICAgICAgIC8vIHNoYXJlIGEgY29tbW9uIGJhY2tpbmcgc3RvcmUuCi0gICAgICAg
IHZvaWQgY29weVJlZmVyZW5jZVRvQml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImKTsKKyAg
ICAgICAgdm9pZCBjb3B5UmVmZXJlbmNlVG9CaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJhbWUmKTsK
IAogICAgICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhzdGFydFgsIHN0YXJ0WSks
IChlbmRYLCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2FtZSBYLWNvb3JkaW5hdGVzIG9u
IGVhY2ggc3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcKQEAgLTMwNywxMCAr
MzA3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBy
ZXBldGl0aW9ucyB0byBwZXJmb3JtIGZvciBhbiBhbmltYXRpb24gbG9vcC4KICAgICAgICAgdmly
dHVhbCBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4gY0FuaW1hdGlvbk5vbmU7
IH0KIAotICAgICAgICAvLyBDYWxsZWQgdG8gb2J0YWluIHRoZSBSR0JBMzJCdWZmZXIgZnVsbCBv
ZiBkZWNvZGVkIGRhdGEgZm9yIHJlbmRlcmluZy4KKyAgICAgICAgLy8gQ2FsbGVkIHRvIG9idGFp
biB0aGUgSW1hZ2VGcmFtZSBmdWxsIG9mIGRlY29kZWQgZGF0YSBmb3IgcmVuZGVyaW5nLgogICAg
ICAgICAvLyBUaGUgZGVjb2RlciBwbHVnaW4gd2lsbCBkZWNvZGUgYXMgbXVjaCBvZiB0aGUgZnJh
bWUgYXMgaXQgY2FuIGJlZm9yZQogICAgICAgICAvLyBoYW5kaW5nIGJhY2sgdGhlIGJ1ZmZlci4K
LSAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qp
ID0gMDsKKyAgICAgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6
ZV90KSA9IDA7CiAKICAgICAgICAgLy8gV2hldGhlciBvciBub3QgdGhlIHVuZGVybHlpbmcgaW1h
Z2UgZm9ybWF0IGV2ZW4gc3VwcG9ydHMgYWxwaGEKICAgICAgICAgLy8gdHJhbnNwYXJlbmN5LgpA
QCAtMzU0LDcgKzM1NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHNjYWxl
ZFkoaW50IG9yaWdZLCBpbnQgc2VhcmNoU3RhcnQgPSAwKTsKIAogICAgICAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBtX2RhdGE7IC8vIFRoZSBlbmNvZGVkIGRhdGEuCi0gICAgICAgIFZlY3RvcjxS
R0JBMzJCdWZmZXI+IG1fZnJhbWVCdWZmZXJDYWNoZTsKKyAgICAgICAgVmVjdG9yPEltYWdlRnJh
bWU+IG1fZnJhbWVCdWZmZXJDYWNoZTsKICAgICAgICAgQ29sb3JQcm9maWxlIG1fY29sb3JQcm9m
aWxlOwogICAgICAgICBib29sIG1fc2NhbGVkOwogICAgICAgICBWZWN0b3I8aW50PiBtX3NjYWxl
ZENvbHVtbnM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9i
bXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gNzU3
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUsNyBAQCBib29sIEJNUElt
YWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUoKTsKIH0KIAotUkdCQTMyQnVmZmVyKiBCTVBJbWFnZURlY29kZXI6OmZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCitJbWFnZUZyYW1lKiBCTVBJbWFnZURlY29k
ZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4KQog
ICAgICAgICByZXR1cm4gMDsKQEAgLTc1LDggKzc1LDggQEAgUkdCQTMyQnVmZmVyKiBCTVBJbWFn
ZURlY29kZXI6OmZyYW1lQnVmZgogICAgICAgICBtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKS5z
ZXRQcmVtdWx0aXBseUFscGhhKG1fcHJlbXVsdGlwbHlBbHBoYSk7CiAgICAgfQogCi0gICAgUkdC
QTMyQnVmZmVyKiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCk7Ci0gICAgaWYg
KGJ1ZmZlci0+c3RhdHVzKCkgIT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKQorICAgIElt
YWdlRnJhbWUqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGUuZmlyc3QoKTsKKyAgICBpZiAo
YnVmZmVyLT5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQogICAgICAgICBk
ZWNvZGUoZmFsc2UpOwogICAgIHJldHVybiBidWZmZXI7CiB9CkBAIC05OCw3ICs5OCw3IEBAIHZv
aWQgQk1QSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2kKICAgICAgICAgc2V0RmFpbGVk
KCk7CiAgICAgLy8gSWYgd2UncmUgZG9uZSBkZWNvZGluZyB0aGUgaW1hZ2UsIHdlIGRvbid0IG5l
ZWQgdGhlIEJNUEltYWdlUmVhZGVyCiAgICAgLy8gYW55bW9yZS4gIChJZiB3ZSBmYWlsZWQsIHxt
X3JlYWRlcnwgaGFzIGFscmVhZHkgYmVlbiBjbGVhcmVkLikKLSAgICBlbHNlIGlmICghbV9mcmFt
ZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCkuc3Rh
dHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKKyAgICBlbHNlIGlmICghbV9m
cmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlLmZpcnN0KCku
c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkpCiAgICAgICAgIG1fcmVhZGVy
LmNsZWFyKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDc1
NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25z
dCB7IHJldHVybiAiYm1wIjsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RGF0YShTaGFyZWRC
dWZmZXIqLCBib29sIGFsbERhdGFSZWNlaXZlZCk7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Np
emVBdmFpbGFibGUoKTsKLSAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QgaW5kZXgpOworICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWls
ZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8v
IGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBm
cm9tIGluc2lkZQogICAgICAgICAvLyBCTVBJbWFnZVJlYWRlciEKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmNwcAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NywxMCArNzcsMTAgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25s
eQogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEFT
U0VSVChtX2J1ZmZlcik7ICAvLyBQYXJlbnQgc2hvdWxkIHNldCB0aGlzIGJlZm9yZSBhc2tpbmcg
dXMgdG8gZGVjb2RlIQotICAgIGlmIChtX2J1ZmZlci0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVy
OjpGcmFtZUVtcHR5KSB7CisgICAgaWYgKG1fYnVmZmVyLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1l
OjpGcmFtZUVtcHR5KSB7CiAgICAgICAgIGlmICghbV9idWZmZXItPnNldFNpemUobV9wYXJlbnQt
PnNpemUoKS53aWR0aCgpLCBtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpKSkKICAgICAgICAgICAg
IHJldHVybiBtX3BhcmVudC0+c2V0RmFpbGVkKCk7IC8vIFVuYWJsZSB0byBhbGxvY2F0ZS4KLSAg
ICAgICAgbV9idWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7Cisg
ICAgICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAg
ICAgICAgLy8gc2V0U2l6ZSgpIGNhbGxzIGVyYXNlQVJHQigpLCB3aGljaCByZXNldHMgdGhlIGFs
cGhhIGZsYWcsIHNvIHdlIGZvcmNlCiAgICAgICAgIC8vIGl0IGJhY2sgdG8gZmFsc2UgaGVyZS4g
IFdlJ2xsIHNldCBpdCB0cnVlIGJlbG93IGluIGFsbCBjYXNlcyB3aGVyZQogICAgICAgICAvLyB0
aGVzZSAwcyBjb3VsZCBhY3R1YWxseSBzaG93IHRocm91Z2guCkBAIC0xMjIsNyArMTIyLDcgQEAg
Ym9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAgIH0KIAogICAgIC8v
IERvbmUhCi0gICAgbV9idWZmZXItPnNldFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxl
dGUpOworICAgIG1fYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCShyZXZp
c2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Jt
cC9CTVBJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMSArNjQsMTEgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIHxwYXJlbnR8IGlzIHRoZSBkZWNvZGVyIHRo
YXQgb3ducyB1cy4KICAgICAgICAgLy8gfHN0YXJ0T2Zmc2V0fCBwb2ludHMgdG8gdGhlIHN0YXJ0
IG9mIHRoZSBCTVAgd2l0aGluIHRoZSBmaWxlLgotICAgICAgICAvLyB8YnVmZmVyfCBwb2ludHMg
YXQgYW4gZW1wdHkgUkdCQTMyQnVmZmVyIHRoYXQgd2UnbGwgaW5pdGlhbGl6ZSBhbmQKKyAgICAg
ICAgLy8gfGJ1ZmZlcnwgcG9pbnRzIGF0IGFuIGVtcHR5IEltYWdlRnJhbWUgdGhhdCB3ZSdsbCBp
bml0aWFsaXplIGFuZAogICAgICAgICAvLyBmaWxsIHdpdGggZGVjb2RlZCBkYXRhLgogICAgICAg
ICBCTVBJbWFnZVJlYWRlcihJbWFnZURlY29kZXIqIHBhcmVudCwgc2l6ZV90IGRlY29kZWRBbmRI
ZWFkZXJPZmZzZXQsIHNpemVfdCBpbWdEYXRhT2Zmc2V0LCBib29sIHVzZXNBbmRNYXNrKTsKIAot
ICAgICAgICB2b2lkIHNldEJ1ZmZlcihSR0JBMzJCdWZmZXIqIGJ1ZmZlcikgeyBtX2J1ZmZlciA9
IGJ1ZmZlcjsgfQorICAgICAgICB2b2lkIHNldEJ1ZmZlcihJbWFnZUZyYW1lKiBidWZmZXIpIHsg
bV9idWZmZXIgPSBidWZmZXI7IH0KICAgICAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciog
ZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9CiAKICAgICAgICAgLy8gRG9lcyB0aGUgYWN0dWFsIGRl
Y29kaW5nLiAgSWYgfG9ubHlTaXplfCBpcyB0cnVlLCBkZWNvZGluZyBvbmx5CkBAIC0yNzQsNyAr
Mjc0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBJbWFnZURlY29kZXIqIG1fcGFy
ZW50OwogCiAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBmb3IgdGhlIHBpeGVsIGRhdGEuCi0g
ICAgICAgIFJHQkEzMkJ1ZmZlciogbV9idWZmZXI7CisgICAgICAgIEltYWdlRnJhbWUqIG1fYnVm
ZmVyOwogCiAgICAgICAgIC8vIFRoZSBmaWxlIHRvIGRlY29kZS4KICAgICAgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gbV9kYXRhOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJv
LmNwcAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
LDcgKzMwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1OYXRpdmVJbWFnZVB0ciBSR0JB
MzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAorTmF0aXZlSW1hZ2VQdHIgSW1hZ2VG
cmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNhaXJvX2ltYWdl
X3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAogICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGNoYXIqPihjb25zdF9jYXN0PFBpeGVsRGF0YSo+KApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2cvSW1hZ2VEZWNvZGVyQ0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NnL0ltYWdlRGVjb2Rl
ckNHLmNwcAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jZy9JbWFnZURlY29kZXJDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDIy
ICszMywyMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBSR0JBMzJCdWZmZXI6
OlBpeGVsRGF0YSogZ2V0UHRyQXNQaXhlbERhdGEoQ0ZNdXRhYmxlRGF0YVJlZiBkYXRhKQorc3Rh
dGljIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZ2V0UHRyQXNQaXhlbERhdGEoQ0ZNdXRhYmxlRGF0
YVJlZiBkYXRhKQogewotICAgIHJldHVybiBkYXRhID8gcmVpbnRlcnByZXRfY2FzdDxSR0JBMzJC
dWZmZXI6OlBpeGVsRGF0YSo+KENGRGF0YUdldE11dGFibGVCeXRlUHRyKGRhdGEpKSA6IDA7Cisg
ICAgcmV0dXJuIGRhdGEgPyByZWludGVycHJldF9jYXN0PEltYWdlRnJhbWU6OlBpeGVsRGF0YSo+
KENGRGF0YUdldE11dGFibGVCeXRlUHRyKGRhdGEpKSA6IDA7CiB9CiAgICAKLXZvaWQgUkdCQTMy
QnVmZmVyOjpjb3B5UmVmZXJlbmNlVG9CaXRtYXBEYXRhKGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3Ro
ZXIpCit2b2lkIEltYWdlRnJhbWU6OmNvcHlSZWZlcmVuY2VUb0JpdG1hcERhdGEoY29uc3QgSW1h
Z2VGcmFtZSYgb3RoZXIpCiB7CiAgICAgQVNTRVJUKHRoaXMgIT0gJm90aGVyKTsKICAgICBtX2Jh
Y2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwogICAgIG1fYnl0ZXMgPSBnZXRQdHJB
c1BpeGVsRGF0YShtX2JhY2tpbmdTdG9yZS5nZXQoKSk7Ci0gICAgLy8gRklYTUU6IFRoZSByZXN0
IG9mIHRoaXMgZnVuY3Rpb24gc2VlbXMgcmVkdW5kYW50IHdpdGggUkdCQTMyQnVmZmVyOjpjb3B5
Qml0bWFwRGF0YS4KKyAgICAvLyBGSVhNRTogVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBzZWVt
cyByZWR1bmRhbnQgd2l0aCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YS4KICAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CiAgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiB9CiAK
LWJvb2wgUkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90
aGVyKQorYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBv
dGhlcikKIHsKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtNjAsNyArNjAsNyBAQCBib29sIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEoY29uc3Qg
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgUkdCQTMyQnVmZmVyOjpzZXRTaXplKGludCBu
ZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKK2Jvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3
V2lkdGgsIGludCBuZXdIZWlnaHQpCiB7CiAgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CiAg
ICAgc2l6ZV90IGJhY2tpbmdTdG9yZVNpemUgPSBuZXdXaWR0aCAqIG5ld0hlaWdodCAqIHNpemVv
ZihQaXhlbERhdGEpOwpAQCAtOTEsNyArOTEsNyBAQCBzdGF0aWMgQ0dDb2xvclNwYWNlUmVmIGNy
ZWF0ZUNvbG9yU3BhY2UoCiAjZW5kaWYKIH0KIAotTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVy
Ojphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKK05hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFz
TmV3TmF0aXZlSW1hZ2UoKSBjb25zdAogewogICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+
IGNvbG9yU3BhY2UoQWRvcHRDRiwgY3JlYXRlQ29sb3JTcGFjZShtX2NvbG9yUHJvZmlsZSkpOwog
ICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyKEFkb3B0Q0YsIENH
RGF0YVByb3ZpZGVyQ3JlYXRlV2l0aENGRGF0YShtX2JhY2tpbmdTdG9yZS5nZXQoKSkpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExOCwxMyArMTE4LDEzIEBAIGludCBHSUZJbWFnZURlY29kZXI6
OnJlcGV0aXRpb25Db3VudCgpIGMKICAgICByZXR1cm4gbV9yZXBldGl0aW9uQ291bnQ7CiB9CiAK
LVJHQkEzMkJ1ZmZlciogR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90
IGluZGV4KQorSW1hZ2VGcmFtZSogR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgUkdCQTMyQnVmZmVyJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVtpbmRleF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVD
b21wbGV0ZSkKKyAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVtpbmRl
eF07CisgICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUp
CiAgICAgICAgIGRlY29kZShpbmRleCArIDEsIEdJRkZ1bGxRdWVyeSk7CiAgICAgcmV0dXJuICZm
cmFtZTsKIH0KQEAgLTE1MSw3ICsxNTEsNyBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6Y2xlYXJG
cmFtZUJ1ZmZlckNhCiAgICAgLy8gYWx3YXlzIHVzZSBJbWFnZVNvdXJjZTo6Y2xlYXIodHJ1ZSwg
Li4uKSB0byBjb21wbGV0ZWx5IGZyZWUgdGhlIG1lbW9yeSBpbgogICAgIC8vIHRoaXMgY2FzZS4K
ICAgICBjbGVhckJlZm9yZUZyYW1lID0gc3RkOjptaW4oY2xlYXJCZWZvcmVGcmFtZSwgbV9mcmFt
ZUJ1ZmZlckNhY2hlLnNpemUoKSAtIDEpOwotICAgIGNvbnN0IFZlY3RvcjxSR0JBMzJCdWZmZXI+
OjppdGVyYXRvciBlbmQobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkgKyBjbGVhckJlZm9yZUZy
YW1lKTsKKyAgICBjb25zdCBWZWN0b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGVuZChtX2ZyYW1l
QnVmZmVyQ2FjaGUuYmVnaW4oKSArIGNsZWFyQmVmb3JlRnJhbWUpOwogCiAgICAgLy8gV2UgbmVl
ZCB0byBwcmVzZXJ2ZSBmcmFtZXMgc3VjaCB0aGF0OgogICAgIC8vICAgKiBXZSBkb24ndCBjbGVh
ciB8ZW5kfApAQCAtMTcxLDE2ICsxNzEsMTYgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFy
RnJhbWVCdWZmZXJDYQogICAgIC8vICAgKiBJZiB0aGUgZnJhbWUgaXMgcGFydGlhbCwgd2UncmUg
ZGVjb2RpbmcgaXQsIHNvIGRvbid0IGNsZWFyIGl0OyBpZiBpdAogICAgIC8vICAgICBoYXMgYSBk
aXNwb3NhbCBtZXRob2Qgb3RoZXIgdGhhbiBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMsIHN0b3AK
ICAgICAvLyAgICAgc2Nhbm5pbmcsIGFzIHdlJ2xsIG9ubHkgbmVlZCB0aGlzIGZyYW1lIHdoZW4g
ZGVjb2RpbmcgdGhlIG5leHQgb25lLgotICAgIFZlY3RvcjxSR0JBMzJCdWZmZXI+OjppdGVyYXRv
ciBpKGVuZCk7Ci0gICAgZm9yICg7IChpICE9IG1fZnJhbWVCdWZmZXJDYWNoZS5iZWdpbigpKSAm
JiAoKGktPnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgfHwgKGktPmRpc3Bv
c2FsTWV0aG9kKCkgPT0gUkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKTsg
LS1pKSB7Ci0gICAgICAgIGlmICgoaS0+c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNv
bXBsZXRlKSAmJiAoaSAhPSBlbmQpKQorICAgIFZlY3RvcjxJbWFnZUZyYW1lPjo6aXRlcmF0b3Ig
aShlbmQpOworICAgIGZvciAoOyAoaSAhPSBtX2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSkgJiYg
KChpLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB8fCAoaS0+ZGlzcG9zYWxN
ZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKTsgLS1pKSB7
CisgICAgICAgIGlmICgoaS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkg
JiYgKGkgIT0gZW5kKSkKICAgICAgICAgICAgIGktPmNsZWFyKCk7CiAgICAgfQogCiAgICAgLy8g
Tm93IHxpfCBob2xkcyB0aGUgbGFzdCBmcmFtZSB3ZSBuZWVkIHRvIHByZXNlcnZlOyBjbGVhciBw
cmlvciBmcmFtZXMuCi0gICAgZm9yIChWZWN0b3I8UkdCQTMyQnVmZmVyPjo6aXRlcmF0b3Igaiht
X2ZyYW1lQnVmZmVyQ2FjaGUuYmVnaW4oKSk7IGogIT0gaTsgKytqKSB7Ci0gICAgICAgIEFTU0VS
VChqLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lUGFydGlhbCk7Ci0gICAgICAgIGlm
IChqLT5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpCisgICAgZm9yIChWZWN0
b3I8SW1hZ2VGcmFtZT46Oml0ZXJhdG9yIGoobV9mcmFtZUJ1ZmZlckNhY2hlLmJlZ2luKCkpOyBq
ICE9IGk7ICsraikgeworICAgICAgICBBU1NFUlQoai0+c3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6
RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgaWYgKGotPnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpCiAgICAgICAgICAgICBqLT5jbGVhcigpOwogICAgIH0KIH0KQEAgLTIyMCw4ICsy
MjAsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zCiAgICAgICAg
IHJldHVybiB0cnVlOwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5
LgotICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5k
ZXhdOwotICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0
eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKKyAgICBJbWFnZUZyYW1lJiBidWZm
ZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07CisgICAgaWYgKChidWZmZXIuc3Rh
dHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFt
ZUluZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gV3JpdGUgb25lIHJvdydz
IHdvcnRoIG9mIGRhdGEgaW50byB0aGUgZnJhbWUuICAKQEAgLTI1MSwxNSArMjUxLDE1IEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJ
bmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgUkdCQTMyQnVmZmVyOjpGcmFtZURpc3Bvc2Fs
TWV0aG9kIGRpc3Bvc2FsTWV0aG9kKQorYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxl
dGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFt
ZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCkKIHsKICAgICAvLyBJbml0aWFs
aXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuICBTb21lIEdJRnMgaW5zZXJ0IGRvLW5vdGhpbmcg
ZnJhbWVzLAogICAgIC8vIGluIHdoaWNoIGNhc2Ugd2UgbmV2ZXIgcmVhY2ggaGF2ZURlY29kZWRS
b3coKSBiZWZvcmUgZ2V0dGluZyBoZXJlLgotICAgIFJHQkEzMkJ1ZmZlciYgYnVmZmVyID0gbV9m
cmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlmICgoYnVmZmVyLnN0YXR1cygpID09
IFJHQkEzMkJ1ZmZlcjo6RnJhbWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4
KSkKKyAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRl
eF07CisgICAgaWYgKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkg
JiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBpbml0RnJhbWVCdWZmZXIoKSBoYXMgYWxyZWFkeSBjYWxsZWQgc2V0RmFpbGVkKCkuCiAKLSAg
ICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CisgICAgYnVm
ZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKICAgICBidWZmZXIuc2V0
RHVyYXRpb24oZnJhbWVEdXJhdGlvbik7CiAgICAgYnVmZmVyLnNldERpc3Bvc2FsTWV0aG9kKGRp
c3Bvc2FsTWV0aG9kKTsKIApAQCAtMjc3LDggKzI3Nyw4IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVy
OjpmcmFtZUNvbXBsZXRlKHVuc2kKICAgICAgICAgICAgIC8vIEZpcnN0IHNraXAgb3ZlciBwcmlv
ciBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgZnJhbWVzIChzaW5jZSB0aGV5CiAgICAgICAgICAg
ICAvLyBkb24ndCBhZmZlY3QgdGhlIHN0YXJ0IHN0YXRlIG9mIHRoaXMgZnJhbWUpIHRoZSBzYW1l
IHdheSB3ZSBkbyBpbgogICAgICAgICAgICAgLy8gaW5pdEZyYW1lQnVmZmVyKCkuCi0gICAgICAg
ICAgICBjb25zdCBSR0JBMzJCdWZmZXIqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hl
Wy0tZnJhbWVJbmRleF07Ci0gICAgICAgICAgICB3aGlsZSAoZnJhbWVJbmRleCAmJiAocHJldkJ1
ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVQ
cmV2aW91cykpCisgICAgICAgICAgICBjb25zdCBJbWFnZUZyYW1lKiBwcmV2QnVmZmVyID0gJm1f
ZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOworICAgICAgICAgICAgd2hpbGUgKGZyYW1l
SW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlz
cG9zZU92ZXJ3cml0ZVByZXZpb3VzKSkKICAgICAgICAgICAgICAgICBwcmV2QnVmZmVyID0gJm1f
ZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogCiAgICAgICAgICAgICAvLyBOb3csIGlm
IHdlJ3JlIGF0IGEgRGlzcG9zZU5vdFNwZWNpZmllZCBvciBEaXNwb3NlS2VlcCBmcmFtZSwgdGhl
bgpAQCAtMjg5LDcgKzI4OSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KHVuc2kKICAgICAgICAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyBjYXNlIGlzIGEgRGlzcG9z
ZU92ZXJ3cml0ZUJnY29sb3IgZnJhbWUuICBJZgogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFs
cGhhLCBhbmQgaXRzIHJlY3QgaXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAg
ICAgICAgICAgIC8vIHJlY3QsIHdlIGtub3cgdGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhh
LgotICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IFJHQkEz
MkJ1ZmZlcjo6RGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IpICYmICFwcmV2QnVmZmVyLT5oYXNBbHBo
YSgpICYmIGJ1ZmZlci5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+cmVjdCgpKSkKKyAgICAg
ICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpE
aXNwb3NlT3ZlcndyaXRlQmdjb2xvcikgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVm
ZmVyLnJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5yZWN0KCkpKQogICAgICAgICAgICAgICAg
IGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zMzIsNyAr
MzMyLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgIGlm
IChmcmFtZVJlY3QuYm90dG9tKCkgPiBzaXplKCkuaGVpZ2h0KCkpCiAgICAgICAgIGZyYW1lUmVj
dC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpIC0gZnJhbWVSZWFkZXItPnlfb2Zmc2V0KTsKIAot
ICAgIFJHQkEzMkJ1ZmZlciogY29uc3QgYnVmZmVyID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFt
ZUluZGV4XTsKKyAgICBJbWFnZUZyYW1lKiBjb25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNh
Y2hlW2ZyYW1lSW5kZXhdOwogICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVS
ZWN0LngoKSk7CiAgICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LnJp
Z2h0KCksIGxlZnQpOwogICAgIGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3Qu
eSgpKTsKQEAgLTM1MiwxNSArMzUyLDE1IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJh
bWVCdWZmZXIodW4KICAgICAgICAgLy8gdGhlIHN0YXJ0aW5nIHN0YXRlIG9mIHRoZSBwcmV2aW91
cyBmcmFtZSwgc28gc2tpcCBvdmVyIHRoZW0uICAoSWYgdGhlCiAgICAgICAgIC8vIGZpcnN0IGZy
YW1lIHNwZWNpZmllcyB0aGlzIG1ldGhvZCwgaXQgd2lsbCBnZXQgdHJlYXRlZCBsaWtlCiAgICAg
ICAgIC8vIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGJlbG93IGFuZCByZXNldCB0byBhIGNvbXBs
ZXRlbHkgZW1wdHkgaW1hZ2UuKQotICAgICAgICBjb25zdCBSR0JBMzJCdWZmZXIqIHByZXZCdWZm
ZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07Ci0gICAgICAgIFJHQkEzMkJ1
ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9z
YWxNZXRob2QoKTsKLSAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYgKHByZXZNZXRob2QgPT0g
UkdCQTMyQnVmZmVyOjpEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMpKSB7CisgICAgICAgIGNvbnN0
IEltYWdlRnJhbWUqIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRl
eF07CisgICAgICAgIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgcHJldk1ldGhvZCA9
IHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCk7CisgICAgICAgIHdoaWxlIChmcmFtZUluZGV4
ICYmIChwcmV2TWV0aG9kID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cykp
IHsKICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlWy0tZnJhbWVJ
bmRleF07CiAgICAgICAgICAgICBwcmV2TWV0aG9kID0gcHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRo
b2QoKTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlQocHJldkJ1ZmZlci0+c3RhdHVzKCkgPT0g
UkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyAgICAgICAgQVNTRVJUKHByZXZCdWZmZXIt
PnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOwogCi0gICAgICAgIGlmICgo
cHJldk1ldGhvZCA9PSBSR0JBMzJCdWZmZXI6OkRpc3Bvc2VOb3RTcGVjaWZpZWQpIHx8IChwcmV2
TWV0aG9kID09IFJHQkEzMkJ1ZmZlcjo6RGlzcG9zZUtlZXApKSB7CisgICAgICAgIGlmICgocHJl
dk1ldGhvZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3BlY2lmaWVkKSB8fCAocHJldk1ldGhv
ZCA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlS2VlcCkpIHsKICAgICAgICAgICAgIC8vIFByZXNlcnZl
IHRoZSBsYXN0IGZyYW1lIGFzIHRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZS4KICAg
ICAgICAgICAgIGlmICghYnVmZmVyLT5jb3B5Qml0bWFwRGF0YSgqcHJldkJ1ZmZlcikpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwpAQCAtMzg5LDcgKzM4OSw3IEBAIGJvb2wg
R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICB9CiAKICAgICAvLyBVcGRh
dGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCi0gICAgYnVmZmVyLT5zZXRT
dGF0dXMoUkdCQTMyQnVmZmVyOjpGcmFtZVBhcnRpYWwpOworICAgIGJ1ZmZlci0+c2V0U3RhdHVz
KEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAKICAgICAvLyBSZXNldCB0aGUgYWxwaGEgcGl4
ZWwgdHJhY2tlciBmb3IgdGhpcyBmcmFtZS4KICAgICBtX2N1cnJlbnRCdWZmZXJTYXdBbHBoYSA9
IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gNzU3MDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwog
ICAgICAgICB2aXJ0dWFsIHNpemVfdCBmcmFtZUNvdW50KCk7CiAgICAgICAgIHZpcnR1YWwgaW50
IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciog
ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisgICAgICAgIHZpcnR1YWwgSW1hZ2VG
cmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CiAgICAgICAgIC8vIENBVVRJ
T046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQK
ICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2Fs
bGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAgIC8vIEdJRkltYWdlUmVhZGVyIQpAQCAtNTgs
NyArNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIENhbGxiYWNrcyBmcm9t
IHRoZSBHSUYgcmVhZGVyLgogICAgICAgICB2b2lkIGRlY29kaW5nSGFsdGVkKHVuc2lnbmVkIGJ5
dGVzTGVmdCk7CiAgICAgICAgIGJvb2wgaGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRl
eCwgdW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVuc2ln
bmVkIHJvd051bWJlciwgdW5zaWduZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVu
dFBpeGVscyk7Ci0gICAgICAgIGJvb2wgZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4
LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLCBSR0JBMzJCdWZmZXI6OkZyYW1lRGlzcG9zYWxNZXRo
b2QgZGlzcG9zYWxNZXRob2QpOworICAgICAgICBib29sIGZyYW1lQ29tcGxldGUodW5zaWduZWQg
ZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RnJhbWVEaXNw
b3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7CiAgICAgICAgIHZvaWQgZ2lmQ29tcGxldGUoKTsK
IAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJKHJldmlzaW9u
IDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjM4LDExICs2MzgsMTEgQEAgYm9v
bCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZAogICAgICAgICB9CiAgICAgICAg
IC8vIE5PVEU6IFRoaXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxN
ZXRob2QgZW51bQogICAgICAgICAvLyBtYXRjaGluZyB0aG9zZSBpbiB0aGUgR0lGIHNwZWMhCi0g
ICAgICAgIGZyYW1lX3JlYWRlci0+ZGlzcG9zYWxfbWV0aG9kID0gKFdlYkNvcmU6OlJHQkEzMkJ1
ZmZlcjo6RnJhbWVEaXNwb3NhbE1ldGhvZCkoKCgqcSkgPj4gMikgJiAweDcpOworICAgICAgICBm
cmFtZV9yZWFkZXItPmRpc3Bvc2FsX21ldGhvZCA9IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFt
ZURpc3Bvc2FsTWV0aG9kKSgoKCpxKSA+PiAyKSAmIDB4Nyk7CiAgICAgICAgIC8vIFNvbWUgc3Bl
Y3Mgc2F5IDNyZCBiaXQgKHZhbHVlIDQpLCBvdGhlciBzcGVjcyBzYXkgdmFsdWUgMwogICAgICAg
ICAvLyBMZXQncyBjaG9vc2UgMyAodGhlIG1vcmUgcG9wdWxhcikKICAgICAgICAgaWYgKGZyYW1l
X3JlYWRlci0+ZGlzcG9zYWxfbWV0aG9kID09IDQpCi0gICAgICAgICAgZnJhbWVfcmVhZGVyLT5k
aXNwb3NhbF9tZXRob2QgPSBXZWJDb3JlOjpSR0JBMzJCdWZmZXI6OkRpc3Bvc2VPdmVyd3JpdGVQ
cmV2aW91czsKKyAgICAgICAgICBmcmFtZV9yZWFkZXItPmRpc3Bvc2FsX21ldGhvZCA9IFdlYkNv
cmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91czsKICAgICAgICAgZnJhbWVf
cmVhZGVyLT5kZWxheV90aW1lID0gR0VUSU5UMTYocSArIDEpICogMTA7CiAgICAgICB9CiAgICAg
ICBHRVROKDEsIGdpZl9jb25zdW1lX2Jsb2NrKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5o
CShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsNyArMTAxLDcg
QEAgc3RydWN0IEdJRkZyYW1lUmVhZGVyIHsKICAgICB1bnNpZ25lZCBpbnQgeF9vZmZzZXQsIHlf
b2Zmc2V0OyAgICAvKiBXaXRoIHJlc3BlY3QgdG8gInNjcmVlbiIgb3JpZ2luICovCiAgICAgdW5z
aWduZWQgaW50IGhlaWdodCwgd2lkdGg7CiAgICAgaW50IHRwaXhlbDsgICAgICAgICAgICAgICAg
IC8qIEluZGV4IG9mIHRyYW5zcGFyZW50IHBpeGVsICovCi0gICAgV2ViQ29yZTo6UkdCQTMyQnVm
ZmVyOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsX21ldGhvZDsgICAvKiBSZXN0b3JlIHRv
IGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuKi8KKyAgICBXZWJDb3JlOjpJbWFnZUZy
YW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsX21ldGhvZDsgICAvKiBSZXN0b3JlIHRv
IGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuKi8KICAgICB1bnNpZ25lZCBjaGFyICps
b2NhbF9jb2xvcm1hcDsgICAgLyogUGVyLWltYWdlIGNvbG9ybWFwICovCiAgICAgaW50IGxvY2Fs
X2NvbG9ybWFwX3NpemU7ICAgIC8qIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuICovCiAg
ICAgCkBAIC0xMzAsNyArMTMwLDcgQEAgc3RydWN0IEdJRkZyYW1lUmVhZGVyIHsKIAogICAgICAg
ICB4X29mZnNldCA9IHlfb2Zmc2V0ID0gd2lkdGggPSBoZWlnaHQgPSAwOwogICAgICAgICB0cGl4
ZWwgPSAwOwotICAgICAgICBkaXNwb3NhbF9tZXRob2QgPSBXZWJDb3JlOjpSR0JBMzJCdWZmZXI6
OkRpc3Bvc2VOb3RTcGVjaWZpZWQ7CisgICAgICAgIGRpc3Bvc2FsX21ldGhvZCA9IFdlYkNvcmU6
OkltYWdlRnJhbWU6OkRpc3Bvc2VOb3RTcGVjaWZpZWQ7CiAKICAgICAgICAgbG9jYWxfY29sb3Jt
YXAgPSAwOwogICAgICAgICBsb2NhbF9jb2xvcm1hcF9zaXplID0gMDsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9o
YWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHAJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaGFpa3UvSW1hZ2VEZWNvZGVySGFpa3UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QK
K05hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAogewog
ICAgIGludCBieXRlc1BlclJvdyA9IHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKICAgICBP
d25QdHI8QkJpdG1hcD4gYml0bWFwKG5ldyBCQml0bWFwKEJSZWN0KDAsIDAsIHdpZHRoKCkgLSAx
LCBoZWlnaHQoKSAtIDEpLCAwLCBCX1JHQkEzMiwgYnl0ZXNQZXJSb3cpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2lj
by9JQ09JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDksMTQgKzEwOSwxNCBAQCBzaXplX3QgSUNPSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvdW50KCkKICAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKTsKIH0KIAotUkdC
QTMyQnVmZmVyKiBJQ09JbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5k
ZXgpCitJbWFnZUZyYW1lKiBJQ09JbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpCiB7CiAgICAgLy8gRW5zdXJlIHxpbmRleHwgaXMgdmFsaWQuCiAgICAgaWYgKGlu
ZGV4ID49IGZyYW1lQ291bnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBSR0JBMzJCdWZm
ZXIqIGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5kZXhdOwotICAgIGlmIChidWZmZXIt
PnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkKKyAgICBJbWFnZUZyYW1l
KiBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2luZGV4XTsKKyAgICBpZiAoYnVmZmVyLT5z
dGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKQogICAgICAgICBkZWNvZGUoaW5k
ZXgsIGZhbHNlKTsKICAgICByZXR1cm4gYnVmZmVyOwogfQpAQCAtMTYyLDcgKzE2Miw3IEBAIHZv
aWQgSUNPSW1hZ2VEZWNvZGVyOjpkZWNvZGUoc2l6ZV90IGluZGUKICAgICAvLyBJZiB3ZSdyZSBk
b25lIGRlY29kaW5nIHRoaXMgZnJhbWUsIHdlIGRvbid0IG5lZWQgdGhlIEJNUEltYWdlUmVhZGVy
IG9yCiAgICAgLy8gUE5HSW1hZ2VEZWNvZGVyIGFueW1vcmUuICAoSWYgd2UgZmFpbGVkLCB0aGVz
ZSBoYXZlIGFscmVhZHkgYmVlbgogICAgIC8vIGNsZWFyZWQuKQotICAgIGVsc2UgaWYgKChtX2Zy
YW1lQnVmZmVyQ2FjaGUuc2l6ZSgpID4gaW5kZXgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbaW5k
ZXhdLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSkpIHsKKyAgICBlbHNl
IGlmICgobV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSA+IGluZGV4KSAmJiAobV9mcmFtZUJ1ZmZl
ckNhY2hlW2luZGV4XS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKSkgewog
ICAgICAgICBtX2JtcFJlYWRlcnNbaW5kZXhdLmNsZWFyKCk7CiAgICAgICAgIG1fcG5nRGVjb2Rl
cnNbaW5kZXhdLmNsZWFyKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAko
cmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIEludFNpemUgZnJhbWVTaXplQXRJ
bmRleChzaXplX3QpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KTsKICAgICAgICAgdmlydHVhbCBzaXplX3QgZnJhbWVD
b3VudCgpOwotICAgICAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCk7CisgICAgICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4
KHNpemVfdCk7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgYWxsIHJl
YWRlcnMgYW5kIGRlY29kZXJzLiAgQmUgY2FyZWZ1bCB0bwogICAgICAgICAvLyBhdm9pZCBhY2Nl
c3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbQog
ICAgICAgICAvLyBpbnNpZGUgQk1QSW1hZ2VSZWFkZXIhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDI1LDcgKzQyNSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNp
Z25lZCAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUkdCQTMyQnVmZmVyKiBKUEVHSW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQorSW1hZ2VGcmFtZSogSlBFR0lt
YWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICAgICBpZiAo
aW5kZXgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNDM1LDggKzQzNSw4IEBAIFJHQkEzMkJ1ZmZl
ciogSlBFR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWYKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hl
WzBdLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsKICAgICB9CiAKLSAg
ICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChm
cmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpCisgICAgSW1hZ2VG
cmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgaWYgKGZyYW1lLnN0YXR1
cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCiAgICAgICAgIGRlY29kZShmYWxzZSk7
CiAgICAgcmV0dXJuICZmcmFtZTsKIH0KQEAgLTQ1MywxMSArNDUzLDExIEBAIGJvb2wgSlBFR0lt
YWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgotICAgIFJHQkEzMkJ1
ZmZlciYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwotICAgIGlmIChidWZmZXIuc3Rh
dHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUVtcHR5KSB7CisgICAgSW1hZ2VGcmFtZSYgYnVm
ZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOworICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0g
SW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewogICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNj
YWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKQogICAgICAgICAgICAg
cmV0dXJuIHNldEZhaWxlZCgpOwotICAgICAgICBidWZmZXIuc2V0U3RhdHVzKFJHQkEzMkJ1ZmZl
cjo6RnJhbWVQYXJ0aWFsKTsKKyAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpG
cmFtZVBhcnRpYWwpOwogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAg
ICBidWZmZXIuc2V0Q29sb3JQcm9maWxlKG1fY29sb3JQcm9maWxlKTsKIApAQCAtNTEzLDcgKzUx
Myw3IEBAIHZvaWQgSlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0NvbXBsZXRlKCkKIAogICAgIC8vIEhh
bmQgYmFjayBhbiBhcHByb3ByaWF0ZWx5IHNpemVkIGJ1ZmZlciwgZXZlbiBpZiB0aGUgaW1hZ2Ug
ZW5kZWQgdXAgYmVpbmcKICAgICAvLyBlbXB0eS4KLSAgICBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0u
c2V0U3RhdHVzKFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0ZSk7CisgICAgbV9mcmFtZUJ1ZmZl
ckNhY2hlWzBdLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKIH0KIAogdm9p
ZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKQEAgLTUzMCw3ICs1MzAs
NyBAQCB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTCiAgICAgICAgIHNl
dEZhaWxlZCgpOwogICAgIC8vIElmIHdlJ3JlIGRvbmUgZGVjb2RpbmcgdGhlIGltYWdlLCB3ZSBk
b24ndCBuZWVkIHRoZSBKUEVHSW1hZ2VSZWFkZXIKICAgICAvLyBhbnltb3JlLiAgKElmIHdlIGZh
aWxlZCwgfG1fcmVhZGVyfCBoYXMgYWxyZWFkeSBiZWVuIGNsZWFyZWQuKQotICAgIGVsc2UgaWYg
KCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGVbMF0u
c3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkKKyAgICBlbHNlIGlmICgh
bV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiAobV9mcmFtZUJ1ZmZlckNhY2hlWzBdLnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpKQogICAgICAgICBtX3JlYWRlci5j
bGVhcigpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24g
NzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkg
Y29uc3QgeyByZXR1cm4gImpwZyI7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzU2l6ZUF2YWls
YWJsZSgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0KTsKLSAgICAgICAgdmlydHVhbCBSR0JBMzJCdWZmZXIqIGZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QgaW5kZXgpOworICAgICAgICB2aXJ0dWFsIEltYWdlRnJhbWUqIGZyYW1l
QnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9y
dHNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIC8vIENBVVRJT046IHNl
dEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQKICAgICAg
ICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0
aGlzIGZyb20gaW5zaWRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZH
LmNwcAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9vcGVudmcvSW1hZ2VEZWNvZGVyT3BlblZHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsNyArMzQsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU5hdGl2ZUltYWdlUHRyIFJH
QkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFn
ZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKIHsKICAgICBzdGF0aWMgY29uc3QgVkdJ
bWFnZUZvcm1hdCBidWZmZXJGb3JtYXQgPSBWR19zQVJHQl84ODg4X1BSRTsKICAgICAvLyBTYXZl
IG1lbW9yeSBieSB1c2luZyAxNi1iaXQgaW1hZ2VzIGZvciBmdWxseSBvcGFxdWUgaW1hZ2VzLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDc1NzA1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcsNyBAQCBib29sIFBOR0ltYWdlRGVjb2Rl
cjo6c2V0U2l6ZSh1bnNpZ25lZCB3CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJHQkEzMkJ1ZmZl
ciogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQorSW1h
Z2VGcmFtZSogUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KQogewogICAgIGlmIChpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMDcsOCArMjA3LDgg
QEAgUkdCQTMyQnVmZmVyKiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZgogICAgICAgICBtX2Zy
YW1lQnVmZmVyQ2FjaGVbMF0uc2V0UHJlbXVsdGlwbHlBbHBoYShtX3ByZW11bHRpcGx5QWxwaGEp
OwogICAgIH0KIAotICAgIFJHQkEzMkJ1ZmZlciYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
MF07Ci0gICAgaWYgKGZyYW1lLnN0YXR1cygpICE9IFJHQkEzMkJ1ZmZlcjo6RnJhbWVDb21wbGV0
ZSkKKyAgICBJbWFnZUZyYW1lJiBmcmFtZSA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKKyAgICBp
ZiAoZnJhbWUuc3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSkKICAgICAgICAg
ZGVjb2RlKGZhbHNlKTsKICAgICByZXR1cm4gJmZyYW1lOwogfQpAQCAtMzMwLDEzICszMzAsMTMg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgICAgICByZXR1
cm47CiAKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCi0gICAg
UkdCQTMyQnVmZmVyJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKGJ1
ZmZlci5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lRW1wdHkpIHsKKyAgICBJbWFnZUZy
YW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgaWYgKGJ1ZmZlci5zdGF0
dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7CiAgICAgICAgIGlmICghYnVmZmVyLnNl
dFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKICAg
ICAgICAgICAgIGxvbmdqbXAoSk1QQlVGKG1fcmVhZGVyLT5wbmdQdHIoKSksIDEpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMy
QnVmZmVyOjpGcmFtZVBhcnRpYWwpOworICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJh
bWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAg
ICAgICAgIGJ1ZmZlci5zZXRDb2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUpOwogCkBAIC00MTAs
NyArNDEwLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogdm9p
ZCBQTkdJbWFnZURlY29kZXI6OnBuZ0NvbXBsZXRlKCkKIHsKICAgICBpZiAoIW1fZnJhbWVCdWZm
ZXJDYWNoZS5pc0VtcHR5KCkpCi0gICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5maXJzdCgpLnNl
dFN0YXR1cyhSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworICAgICAgICBtX2ZyYW1lQnVm
ZmVyQ2FjaGUuZmlyc3QoKS5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CiB9
CiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVh
bCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCB7IHJldHVybiAicG5nIjsgfQogICAg
ICAgICB2aXJ0dWFsIGJvb2wgaXNTaXplQXZhaWxhYmxlKCk7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOwotICAgICAgICB2aXJ0
dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7CisgICAg
ICAgIHZpcnR1YWwgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCk7
CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJl
IGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBl
c3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAgIC8vIFBOR0lt
YWdlUmVhZGVyIQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAg
ICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
ICFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuZmly
c3QoKS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworICAgICAgICAg
ICAgcmV0dXJuICFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIChtX2ZyYW1lQnVmZmVy
Q2FjaGUuZmlyc3QoKS5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKICAg
ICAgICAgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvSW1hZ2VGcmFtZVF0LmNwcAkocmV2aXNp
b24gNzU3MDUpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0
L1JHQkEzMkJ1ZmZlclF0LmNwcDo3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29vZ2xl
LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCisK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5jbHVkZSA8UVBpeG1hcD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JHQkEzMkJ1ZmZlcjo6UkdC
QTMyQnVmZmVyKCkKKyAgICA6IG1faGFzQWxwaGEoZmFsc2UpIAorICAgICwgbV9zaXplKCkKKyAg
ICAsIG1fc3RhdHVzKEZyYW1lRW1wdHkpCisgICAgLCBtX2R1cmF0aW9uKDApCisgICAgLCBtX2Rp
c3Bvc2FsTWV0aG9kKERpc3Bvc2VOb3RTcGVjaWZpZWQpCit7Cit9CisKK1JHQkEzMkJ1ZmZlciYg
UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKK3sKKyAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGNvcHlC
aXRtYXBEYXRhKG90aGVyKTsKKyAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7CisgICAgc2V0U3Rh
dHVzKG90aGVyLnN0YXR1cygpKTsKKyAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsK
KyAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKKyAgICByZXR1
cm4gKnRoaXM7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCit7CisgICAgbV9waXht
YXAgPSBRUGl4bWFwKCk7CisgICAgbV9pbWFnZSA9IFFJbWFnZSgpOworICAgIG1fc3RhdHVzID0g
RnJhbWVFbXB0eTsKKyAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJl
OyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKQorICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0aGUg
Yml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQorICAgIC8vIGluaXRGcmFtZUJ1
ZmZlcigpIGFuZCBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVhZAorICAgIC8v
IG90aGVyIG1ldGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgorfQorCit2b2lkIFJHQkEz
MkJ1ZmZlcjo6emVyb0ZpbGwoKQoreworICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSAmJiAhbV9p
bWFnZS5pc051bGwoKSkgeworICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAobV9pbWFnZS53aWR0
aCgpLCBtX2ltYWdlLmhlaWdodCgpKTsKKyAgICAgICAgbV9pbWFnZSA9IFFJbWFnZSgpOworICAg
IH0KKyAgICBtX3BpeG1hcC5maWxsKFFDb2xvcigwLCAwLCAwLCAwKSk7Cit9CisKK2Jvb2wgUkdC
QTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQorewor
ICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2lt
YWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICBtX3BpeG1hcCA9IG90aGVyLm1fcGl4bWFwOworICAg
IG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBo
YTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUoaW50
IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxk
IG9ubHkgYmUgY2FsbGVkIG9uY2UsIGl0IHdpbGwgbGVhayBtZW1vcnkKKyAgICAvLyBvdGhlcndp
c2UuCisgICAgQVNTRVJUKHdpZHRoKCkgPT0gMCAmJiBoZWlnaHQoKSA9PSAwKTsKKworICAgIG1f
c2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisgICAgbV9pbWFnZSA9IFFJbWFn
ZSgpOworICAgIG1fcGl4bWFwID0gUVBpeG1hcChuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKyAgICBp
ZiAobV9waXhtYXAuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFpl
cm8gdGhlIGltYWdlLgorICAgIHplcm9GaWxsKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
UVBpeG1hcCogUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKK3sKKyAgICBp
ZiAobV9waXhtYXAuaXNOdWxsKCkgJiYgIW1faW1hZ2UuaXNOdWxsKCkpIHsKKyAgICAgICAgbV9w
aXhtYXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UobV9pbWFnZSk7CisgICAgICAgIG1faW1hZ2UgPSBR
SW1hZ2UoKTsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBRUGl4bWFwKG1fcGl4bWFwKTsKK30KKwor
Ym9vbCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNB
bHBoYTsKK30KKwordm9pZCBSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCit7
CisgICAgbV9oYXNBbHBoYSA9IGFscGhhOworfQorCit2b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0Q29s
b3JQcm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMoRnJhbWVTdGF0
dXMgc3RhdHVzKQoreworICAgIG1fc3RhdHVzID0gc3RhdHVzOworfQorCisvLyBUaGUgaW1hZ2Ug
bXVzdCBub3QgaGF2ZSBmb3JtYXQgODg4OCBwcmUgbXVsdGlwbGllZC4uLgordm9pZCBSR0JBMzJC
dWZmZXI6OnNldFBpeG1hcChjb25zdCBRUGl4bWFwJiBwaXhtYXApCit7CisgICAgbV9waXhtYXAg
PSBwaXhtYXA7CisgICAgbV9pbWFnZSA9IFFJbWFnZSgpOworICAgIG1fc2l6ZSA9IHBpeG1hcC5z
aXplKCk7CisgICAgbV9oYXNBbHBoYSA9IHBpeG1hcC5oYXNBbHBoYUNoYW5uZWwoKTsKK30KKwor
aW50IFJHQkEzMkJ1ZmZlcjo6d2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtX3NpemUud2lk
dGgoKTsKK30KKworaW50IFJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zaXplLmhlaWdodCgpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9xdC9JbWFnZUZyYW1lUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L0ltYWdlRnJhbWVRdC5jcHAJKHJl
dmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cXQvSW1hZ2VGcmFtZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJHQkEzMkJ1ZmZlcjo6UkdCQTMyQnVmZmVyKCkKK0ltYWdl
RnJhbWU6OkltYWdlRnJhbWUoKQogICAgIDogbV9oYXNBbHBoYShmYWxzZSkgCiAgICAgLCBtX3Np
emUoKQogICAgICwgbV9zdGF0dXMoRnJhbWVFbXB0eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgUkdCQTMy
QnVmZmVyOjpSR0JBMzJCdWZmZXIoKQogewogfQogCi1SR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZl
cjo6b3BlcmF0b3I9KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCitJbWFnZUZyYW1lJiBJbWFn
ZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiB7CiAgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC01Nyw3ICs1Nyw3IEBAIFJH
QkEzMkJ1ZmZlciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY28KICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKLXZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCit2b2lkIEltYWdlRnJhbWU6OmNsZWFy
KCkKIHsKICAgICBtX3BpeG1hcCA9IFFQaXhtYXAoKTsKICAgICBtX2ltYWdlID0gUUltYWdlKCk7
CkBAIC02OCw3ICs2OCw3IEBAIHZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCiAgICAgLy8gb3Ro
ZXIgbWV0YWRhdGEgb3V0IG9mIHRoaXMgZnJhbWUgbGF0ZXIuCiB9CiAKLXZvaWQgUkdCQTMyQnVm
ZmVyOjp6ZXJvRmlsbCgpCit2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsKCkKIHsKICAgICBpZiAo
bV9waXhtYXAuaXNOdWxsKCkgJiYgIW1faW1hZ2UuaXNOdWxsKCkpIHsKICAgICAgICAgbV9waXht
YXAgPSBRUGl4bWFwKG1faW1hZ2Uud2lkdGgoKSwgbV9pbWFnZS5oZWlnaHQoKSk7CkBAIC03Nyw3
ICs3Nyw3IEBAIHZvaWQgUkdCQTMyQnVmZmVyOjp6ZXJvRmlsbCgpCiAgICAgbV9waXhtYXAuZmls
bChRQ29sb3IoMCwgMCwgMCwgMCkpOwogfQogCi1ib29sIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1h
cERhdGEoY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKK2Jvb2wgSW1hZ2VGcmFtZTo6Y29weUJp
dG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg5LDcgKzg5LDcgQEAgYm9vbCBSR0JBMzJC
dWZmZXI6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29s
IFJHQkEzMkJ1ZmZlcjo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCitib29s
IEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQogewogICAg
IC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UsIGl0IHdpbGwgbGVh
ayBtZW1vcnkKICAgICAvLyBvdGhlcndpc2UuCkBAIC0xMDcsNyArMTA3LDcgQEAgYm9vbCBSR0JB
MzJCdWZmZXI6OnNldFNpemUoaW50IG5ld1dpZHRoLAogICAgIHJldHVybiB0cnVlOwogfQogCi1R
UGl4bWFwKiBSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAorUVBpeG1hcCog
SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0CiB7CiAgICAgaWYgKG1fcGl4bWFw
LmlzTnVsbCgpICYmICFtX2ltYWdlLmlzTnVsbCgpKSB7CiAgICAgICAgIG1fcGl4bWFwID0gUVBp
eG1hcDo6ZnJvbUltYWdlKG1faW1hZ2UpOwpAQCAtMTE2LDI4ICsxMTYsMjggQEAgUVBpeG1hcCog
UkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKAogICAgIHJldHVybiBuZXcgUVBpeG1hcCht
X3BpeG1hcCk7CiB9CiAKLWJvb2wgUkdCQTMyQnVmZmVyOjpoYXNBbHBoYSgpIGNvbnN0Citib29s
IEltYWdlRnJhbWU6Omhhc0FscGhhKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9oYXNBbHBoYTsK
IH0KIAotdm9pZCBSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCit2b2lkIElt
YWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCiB7CiAgICAgbV9oYXNBbHBoYSA9IGFs
cGhhOwogfQogCi12b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0Q29sb3JQcm9maWxlKGNvbnN0IENvbG9y
UHJvZmlsZSYgY29sb3JQcm9maWxlKQordm9pZCBJbWFnZUZyYW1lOjpzZXRDb2xvclByb2ZpbGUo
Y29uc3QgQ29sb3JQcm9maWxlJiBjb2xvclByb2ZpbGUpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBSR0JBMzJCdWZmZXI6OnNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMp
Cit2b2lkIEltYWdlRnJhbWU6OnNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpCiB7CiAgICAg
bV9zdGF0dXMgPSBzdGF0dXM7CiB9CiAKIC8vIFRoZSBpbWFnZSBtdXN0IG5vdCBoYXZlIGZvcm1h
dCA4ODg4IHByZSBtdWx0aXBsaWVkLi4uCi12b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0UGl4bWFwKGNv
bnN0IFFQaXhtYXAmIHBpeG1hcCkKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0UGl4bWFwKGNvbnN0IFFQ
aXhtYXAmIHBpeG1hcCkKIHsKICAgICBtX3BpeG1hcCA9IHBpeG1hcDsKICAgICBtX2ltYWdlID0g
UUltYWdlKCk7CkBAIC0xNDUsMTIgKzE0NSwxMiBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0UGl4
bWFwKGNvbnN0IFFQaXhtCiAgICAgbV9oYXNBbHBoYSA9IHBpeG1hcC5oYXNBbHBoYUNoYW5uZWwo
KTsKIH0KIAotaW50IFJHQkEzMkJ1ZmZlcjo6d2lkdGgoKSBjb25zdAoraW50IEltYWdlRnJhbWU6
OndpZHRoKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zaXplLndpZHRoKCk7CiB9CiAKLWludCBS
R0JBMzJCdWZmZXI6OmhlaWdodCgpIGNvbnN0CitpbnQgSW1hZ2VGcmFtZTo6aGVpZ2h0KCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9zaXplLmhlaWdodCgpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3F0L1JHQkEzMkJ1
ZmZlclF0LmNwcAkocmV2aXNpb24gNzU3MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgR29v
Z2xlLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRo
ZXIKLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
Ci0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgi
Ci0KLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotCi0jaW5jbHVkZSA8UVBpeG1hcD4KLSNp
bmNsdWRlIDxzdGRpby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJHQkEzMkJ1ZmZlcjo6
UkdCQTMyQnVmZmVyKCkKLSAgICA6IG1faGFzQWxwaGEoZmFsc2UpIAotICAgICwgbV9zaXplKCkK
LSAgICAsIG1fc3RhdHVzKEZyYW1lRW1wdHkpCi0gICAgLCBtX2R1cmF0aW9uKDApCi0gICAgLCBt
X2Rpc3Bvc2FsTWV0aG9kKERpc3Bvc2VOb3RTcGVjaWZpZWQpCi17Ci19Ci0KLVJHQkEzMkJ1ZmZl
ciYgUkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKLXsK
LSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhpczsKLQotICAgIGNv
cHlCaXRtYXBEYXRhKG90aGVyKTsKLSAgICBzZXRSZWN0KG90aGVyLnJlY3QoKSk7Ci0gICAgc2V0
U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKLSAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigp
KTsKLSAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKLSAgICBy
ZXR1cm4gKnRoaXM7Ci19Ci0KLXZvaWQgUkdCQTMyQnVmZmVyOjpjbGVhcigpCi17Ci0gICAgbV9w
aXhtYXAgPSBRUGl4bWFwKCk7Ci0gICAgbV9pbWFnZSA9IFFJbWFnZSgpOwotICAgIG1fc3RhdHVz
ID0gRnJhbWVFbXB0eTsKLSAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBo
ZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKQotICAgIC8vIGNhbGxzIHRoaXMgdG8gZnJlZSB0
aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZQotICAgIC8vIGluaXRGcmFt
ZUJ1ZmZlcigpIGFuZCBmcmFtZUNvbXBsZXRlKCkgbWF5IHN0aWxsIG5lZWQgdG8gcmVhZAotICAg
IC8vIG90aGVyIG1ldGFkYXRhIG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgotfQotCi12b2lkIFJH
QkEzMkJ1ZmZlcjo6emVyb0ZpbGwoKQotewotICAgIGlmIChtX3BpeG1hcC5pc051bGwoKSAmJiAh
bV9pbWFnZS5pc051bGwoKSkgewotICAgICAgICBtX3BpeG1hcCA9IFFQaXhtYXAobV9pbWFnZS53
aWR0aCgpLCBtX2ltYWdlLmhlaWdodCgpKTsKLSAgICAgICAgbV9pbWFnZSA9IFFJbWFnZSgpOwot
ICAgIH0KLSAgICBtX3BpeG1hcC5maWxsKFFDb2xvcigwLCAwLCAwLCAwKSk7Ci19Ci0KLWJvb2wg
UkdCQTMyQnVmZmVyOjpjb3B5Qml0bWFwRGF0YShjb25zdCBSR0JBMzJCdWZmZXImIG90aGVyKQot
ewotICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBt
X2ltYWdlID0gb3RoZXIubV9pbWFnZTsKLSAgICBtX3BpeG1hcCA9IG90aGVyLm1fcGl4bWFwOwot
ICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNB
bHBoYTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBSR0JBMzJCdWZmZXI6OnNldFNpemUo
aW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQotewotICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hv
dWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UsIGl0IHdpbGwgbGVhayBtZW1vcnkKLSAgICAvLyBvdGhl
cndpc2UuCi0gICAgQVNTRVJUKHdpZHRoKCkgPT0gMCAmJiBoZWlnaHQoKSA9PSAwKTsKLQotICAg
IG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7Ci0gICAgbV9pbWFnZSA9IFFJ
bWFnZSgpOwotICAgIG1fcGl4bWFwID0gUVBpeG1hcChuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLSAg
ICBpZiAobV9waXhtYXAuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8v
IFplcm8gdGhlIGltYWdlLgotICAgIHplcm9GaWxsKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotUVBpeG1hcCogUkdCQTMyQnVmZmVyOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAg
ICBpZiAobV9waXhtYXAuaXNOdWxsKCkgJiYgIW1faW1hZ2UuaXNOdWxsKCkpIHsKLSAgICAgICAg
bV9waXhtYXAgPSBRUGl4bWFwOjpmcm9tSW1hZ2UobV9pbWFnZSk7Ci0gICAgICAgIG1faW1hZ2Ug
PSBRSW1hZ2UoKTsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBRUGl4bWFwKG1fcGl4bWFwKTsKLX0K
LQotYm9vbCBSR0JBMzJCdWZmZXI6Omhhc0FscGhhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9o
YXNBbHBoYTsKLX0KLQotdm9pZCBSR0JBMzJCdWZmZXI6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEp
Ci17Ci0gICAgbV9oYXNBbHBoYSA9IGFscGhhOwotfQotCi12b2lkIFJHQkEzMkJ1ZmZlcjo6c2V0
Q29sb3JQcm9maWxlKGNvbnN0IENvbG9yUHJvZmlsZSYgY29sb3JQcm9maWxlKQotewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgUkdCQTMyQnVmZmVyOjpzZXRTdGF0dXMoRnJhbWVT
dGF0dXMgc3RhdHVzKQotewotICAgIG1fc3RhdHVzID0gc3RhdHVzOwotfQotCi0vLyBUaGUgaW1h
Z2UgbXVzdCBub3QgaGF2ZSBmb3JtYXQgODg4OCBwcmUgbXVsdGlwbGllZC4uLgotdm9pZCBSR0JB
MzJCdWZmZXI6OnNldFBpeG1hcChjb25zdCBRUGl4bWFwJiBwaXhtYXApCi17Ci0gICAgbV9waXht
YXAgPSBwaXhtYXA7Ci0gICAgbV9pbWFnZSA9IFFJbWFnZSgpOwotICAgIG1fc2l6ZSA9IHBpeG1h
cC5zaXplKCk7Ci0gICAgbV9oYXNBbHBoYSA9IHBpeG1hcC5oYXNBbHBoYUNoYW5uZWwoKTsKLX0K
LQotaW50IFJHQkEzMkJ1ZmZlcjo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBtX3NpemUu
d2lkdGgoKTsKLX0KLQotaW50IFJHQkEzMkJ1ZmZlcjo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbV9zaXplLmhlaWdodCgpOwotfQotCi19CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9za2lhL0ltYWdlRGVjb2RlclNraWEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3NraWEvSW1hZ2VEZWNv
ZGVyU2tpYS5jcHAJKHJldmlzaW9uIDc1NzA1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvc2tpYS9JbWFnZURlY29kZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJHQkEzMkJ1ZmZlcjo6
UkdCQTMyQnVmZmVyKCkKK0ltYWdlRnJhbWU6OkltYWdlRnJhbWUoKQogICAgIDogbV9zdGF0dXMo
RnJhbWVFbXB0eSkKICAgICAsIG1fZHVyYXRpb24oMCkKICAgICAsIG1fZGlzcG9zYWxNZXRob2Qo
RGlzcG9zZU5vdFNwZWNpZmllZCkKQEAgLTM5LDcgKzM5LDcgQEAgUkdCQTMyQnVmZmVyOjpSR0JB
MzJCdWZmZXIoKQogewogfQogCi1SR0JBMzJCdWZmZXImIFJHQkEzMkJ1ZmZlcjo6b3BlcmF0b3I9
KGNvbnN0IFJHQkEzMkJ1ZmZlciYgb3RoZXIpCitJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVy
YXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVy
KQogICAgICAgICByZXR1cm4gKnRoaXM7CkBAIC01Niw3ICs1Niw3IEBAIFJHQkEzMkJ1ZmZlciYg
UkdCQTMyQnVmZmVyOjpvcGVyYXRvcj0oY28KICAgICByZXR1cm4gKnRoaXM7CiB9CiAKLXZvaWQg
UkdCQTMyQnVmZmVyOjpjbGVhcigpCit2b2lkIEltYWdlRnJhbWU6OmNsZWFyKCkKIHsKICAgICBt
X2JpdG1hcC5yZXNldCgpOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKQEAgLTY2LDEyICs2
NiwxMiBAQCB2b2lkIFJHQkEzMkJ1ZmZlcjo6Y2xlYXIoKQogICAgIC8vIG90aGVyIG1ldGFkYXRh
IG91dCBvZiB0aGlzIGZyYW1lIGxhdGVyLgogfQogCi12b2lkIFJHQkEzMkJ1ZmZlcjo6emVyb0Zp
bGwoKQordm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbCgpCiB7CiAgICAgbV9iaXRtYXAuZXJhc2VB
UkdCKDAsIDAsIDAsIDApOwogfQogCi1ib29sIFJHQkEzMkJ1ZmZlcjo6Y29weUJpdG1hcERhdGEo
Y29uc3QgUkdCQTMyQnVmZmVyJiBvdGhlcikKK2Jvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERh
dGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiB7CiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTgxLDcgKzgxLDcgQEAgYm9vbCBSR0JBMzJCdWZmZXI6
OmNvcHlCaXRtYXBEYXRhKGNvbnN0IAogICAgIHJldHVybiBvdGhlckJpdG1hcC5jb3B5VG8oJm1f
Yml0bWFwLCBvdGhlckJpdG1hcC5jb25maWcoKSk7CiB9CiAKLWJvb2wgUkdCQTMyQnVmZmVyOjpz
ZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKK2Jvb2wgSW1hZ2VGcmFtZTo6c2V0
U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlv
biBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZSwgaXQgd2lsbCBsZWFrIG1lbW9yeQogICAgIC8v
IG90aGVyd2lzZS4KQEAgLTk2LDM5ICs5NiwzOSBAQCBib29sIFJHQkEzMkJ1ZmZlcjo6c2V0U2l6
ZShpbnQgbmV3V2lkdGgsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLU5hdGl2ZUltYWdlUHRyIFJH
QkEzMkJ1ZmZlcjo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFn
ZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbmV3IE5hdGl2
ZUltYWdlU2tpYShtX2JpdG1hcCk7CiB9CiAKLWJvb2wgUkdCQTMyQnVmZmVyOjpoYXNBbHBoYSgp
IGNvbnN0Citib29sIEltYWdlRnJhbWU6Omhhc0FscGhhKCkgY29uc3QKIHsKICAgICByZXR1cm4g
IW1fYml0bWFwLmlzT3BhcXVlKCk7CiB9CiAKLXZvaWQgUkdCQTMyQnVmZmVyOjpzZXRIYXNBbHBo
YShib29sIGFscGhhKQordm9pZCBJbWFnZUZyYW1lOjpzZXRIYXNBbHBoYShib29sIGFscGhhKQog
ewogICAgIG1fYml0bWFwLnNldElzT3BhcXVlKCFhbHBoYSk7CiB9CiAKLXZvaWQgUkdCQTMyQnVm
ZmVyOjpzZXRDb2xvclByb2ZpbGUoY29uc3QgQ29sb3JQcm9maWxlJiBjb2xvclByb2ZpbGUpCit2
b2lkIEltYWdlRnJhbWU6OnNldENvbG9yUHJvZmlsZShjb25zdCBDb2xvclByb2ZpbGUmIGNvbG9y
UHJvZmlsZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIFJHQkEzMkJ1ZmZl
cjo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cykKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0U3Rh
dHVzKEZyYW1lU3RhdHVzIHN0YXR1cykKIHsKICAgICBtX3N0YXR1cyA9IHN0YXR1czsKICAgICBp
ZiAobV9zdGF0dXMgPT0gRnJhbWVDb21wbGV0ZSkKICAgICAgICAgbV9iaXRtYXAuc2V0RGF0YUNv
bXBsZXRlKCk7ICAvLyBUZWxsIHRoZSBiaXRtYXAgaXQncyBkb25lLgogfQogCi1pbnQgUkdCQTMy
QnVmZmVyOjp3aWR0aCgpIGNvbnN0CitpbnQgSW1hZ2VGcmFtZTo6d2lkdGgoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2JpdG1hcC53aWR0aCgpOwogfQogCi1pbnQgUkdCQTMyQnVmZmVyOjpoZWln
aHQoKSBjb25zdAoraW50IEltYWdlRnJhbWU6OmhlaWdodCgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fYml0bWFwLmhlaWdodCgpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwCShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcg
KzUzLDcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJl
dHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1SR0JBMzJCdWZmZXIq
IFdFQlBJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpCitJbWFn
ZUZyYW1lKiBXRUJQSW1hZ2VEZWNvZGVyOjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4
KQogewogICAgIGlmIChpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02Myw4ICs2Myw4IEBA
IFJHQkEzMkJ1ZmZlciogV0VCUEltYWdlRGVjb2Rlcjo6ZnJhbWVCdWYKICAgICAgICAgbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdLnNldFByZW11bHRpcGx5QWxwaGEobV9wcmVtdWx0aXBseUFscGhhKTsK
ICAgICB9CiAKLSAgICBSR0JBMzJCdWZmZXImIGZyYW1lID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBd
OwotICAgIGlmIChmcmFtZS5zdGF0dXMoKSAhPSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUp
CisgICAgSW1hZ2VGcmFtZSYgZnJhbWUgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07CisgICAgaWYg
KGZyYW1lLnN0YXR1cygpICE9IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpCiAgICAgICAgIGRl
Y29kZShmYWxzZSk7CiAgICAgcmV0dXJuICZmcmFtZTsKIH0KQEAgLTk2LDggKzk2LDggQEAgYm9v
bCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5UwogICAgIGlmICghaXNBbGxEYXRh
UmVjZWl2ZWQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgQVNTRVJUKCFtX2ZyYW1lQnVm
ZmVyQ2FjaGUuaXNFbXB0eSgpKTsKLSAgICBSR0JBMzJCdWZmZXImIGJ1ZmZlciA9IG1fZnJhbWVC
dWZmZXJDYWNoZVswXTsKLSAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IFJHQkEzMkJ1ZmZlcjo6
RnJhbWVFbXB0eSkgeworICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNo
ZVswXTsKKyAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkp
IHsKICAgICAgICAgQVNTRVJUKHdpZHRoID09IHNpemUoKS53aWR0aCgpKTsKICAgICAgICAgQVNT
RVJUKGhlaWdodCA9PSBzaXplKCkuaGVpZ2h0KCkpOwogICAgICAgICBpZiAoIWJ1ZmZlci5zZXRT
aXplKHdpZHRoLCBoZWlnaHQpKQpAQCAtMTE0LDcgKzExNCw3IEBAIGJvb2wgV0VCUEltYWdlRGVj
b2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgKyt4KQogICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoeCwgeSwgc3JjW2J5dGVzUGVyUGl4
ZWwgKiB4ICsgMl0sIHNyY1tieXRlc1BlclBpeGVsICogeCArIDFdLCBzcmNbYnl0ZXNQZXJQaXhl
bCAqIHggKyAwXSwgMHhmZik7CiAgICAgfQotICAgIGJ1ZmZlci5zZXRTdGF0dXMoUkdCQTMyQnVm
ZmVyOjpGcmFtZUNvbXBsZXRlKTsKKyAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZy
YW1lQ29tcGxldGUpOwogICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgYnVmZmVy
LnNldFJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUElt
YWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiA3NTcwNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5XRUJQSW1hZ2VEZWNvZGVyKCk7CiAgICAgdmlydHVhbCBTdHJpbmcgZmlsZW5hbWVFeHRlbnNp
b24oKSBjb25zdCB7IHJldHVybiAidnA4IjsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1NpemVBdmFp
bGFibGUoKTsKLSAgICB2aXJ0dWFsIFJHQkEzMkJ1ZmZlciogZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCk7CisgICAgdmlydHVhbCBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgo
c2l6ZV90IGluZGV4KTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNBbHBoYSgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93eC9JbWFnZURlY29kZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd3gvSW1hZ2VEZWNvZGVyV3guY3Bw
CShyZXZpc2lvbiA3NTcwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3d4L0ltYWdlRGVjb2Rlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU5hdGl2ZUltYWdlUHRyIFJHQkEzMkJ1ZmZlcjo6
YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05l
d05hdGl2ZUltYWdlKCkgY29uc3QKIHsKICAgICB3eEJpdG1hcCogYm1wID0gbmV3IHd4Qml0bWFw
KHdpZHRoKCksIGhlaWdodCgpLCAzMik7CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzU3
NDEpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTYgQEAKKzIwMTEtMDEtMTMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgUkdC
QTMyQnVmZmVyIHRvIEltYWdlRnJhbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUyMzYzCisKKyAgICAgICAgVXBkYXRlIHJlZmVyZW5jZXMgdG8gdGhl
IG5ldyBuYW1lLgorCisgICAgICAgICogc3JjL1dlYkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OldlYkltYWdlRGVjb2Rlcjo6aXNGcmFtZUNvbXBsZXRlQXRJbmRleCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkltYWdlRGVjb2Rlcjo6Z2V0RnJhbWVBdEluZGV4KToKKwogMjAxMS0w
MS0xMyAgSm9obiBBYmQtRWwtTWFsZWsgIDxqYW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFRvbnkgQ2hhbmcuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiA3NTcwNSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsMTYgKzk3LDE2IEBAIHNpemVfdCBX
ZWJJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb24KIGJvb2wgV2ViSW1hZ2VEZWNvZGVyOjpp
c0ZyYW1lQ29tcGxldGVBdEluZGV4KGludCBpbmRleCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9w
cml2YXRlKTsKLSAgICBSR0JBMzJCdWZmZXIqIGNvbnN0IGZyYW1lQnVmZmVyID0gbV9wcml2YXRl
LT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOworICAgIEltYWdlRnJhbWUqIGNvbnN0IGZyYW1l
QnVmZmVyID0gbV9wcml2YXRlLT5mcmFtZUJ1ZmZlckF0SW5kZXgoaW5kZXgpOwogICAgIGlmICgh
ZnJhbWVCdWZmZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gKGZyYW1lQnVm
ZmVyLT5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpOworICAgIHJldHVy
biAoZnJhbWVCdWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUpOwog
fQogCiBXZWJJbWFnZSBXZWJJbWFnZURlY29kZXI6OmdldEZyYW1lQXRJbmRleChpbnQgaW5kZXgg
PSAwKSBjb25zdAogewogICAgIEFTU0VSVChtX3ByaXZhdGUpOwotICAgIFJHQkEzMkJ1ZmZlciog
Y29uc3QgZnJhbWVCdWZmZXIgPSBtX3ByaXZhdGUtPmZyYW1lQnVmZmVyQXRJbmRleChpbmRleCk7
CisgICAgSW1hZ2VGcmFtZSogY29uc3QgZnJhbWVCdWZmZXIgPSBtX3ByaXZhdGUtPmZyYW1lQnVm
ZmVyQXRJbmRleChpbmRleCk7CiAgICAgaWYgKCFmcmFtZUJ1ZmZlcikKICAgICAgICAgcmV0dXJu
IFdlYkltYWdlKCk7CiAjaWYgV0VCS0lUX1VTSU5HX1NLSUEK
</data>
<flag name="review"
          id="70233"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>