<?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>132800</bug_id>
          
          <creation_ts>2014-05-10 23:28:15 -0700</creation_ts>
          <short_desc>Clean up CrossThreadTask</short_desc>
          <delta_ts>2014-05-12 13:17:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>132798</dependson>
    
    <dependson>132799</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Zan Dobersek">zan</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1008386</commentid>
    <comment_count>0</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-05-10 23:28:15 -0700</bug_when>
    <thetext>Clean up CrossThreadTask</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008388</commentid>
    <comment_count>1</comment_count>
      <attachid>231253</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-05-10 23:36:30 -0700</bug_when>
    <thetext>Created attachment 231253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008432</commentid>
    <comment_count>2</comment_count>
      <attachid>231253</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-11 11:12:32 -0700</bug_when>
    <thetext>Comment on attachment 231253
Patch

This is a fine simplification, but I think we should go even further. I don’t think we want to use CrossThreadCopier. Instead we should have lambdas for each of these and copy the arguments explicitly at the call site. Need a new patch that compiles, though. EWS shows this failing to compile on most platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008449</commentid>
    <comment_count>3</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-05-11 14:00:39 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 231253 [details])
&gt; This is a fine simplification, but I think we should go even further. I don’t think we want to use CrossThreadCopier. Instead we should have lambdas for each of these and copy the arguments explicitly at the call site. Need a new patch that compiles, though. EWS shows this failing to compile on most platforms.

I&apos;m all for creating manual cross-thread copies at call sites, but with C++11 lambdas this incurs an additional copy for objects of types like String. Cross-thread copies for these are created through str.isolatedCopy(), but the return value has to be copied once more when it&apos;s being value-captured by the lambda function.

C++14 fixes that by providing support for init-capture -- http://isocpp.org/files/papers/N3648.html

I guess this won&apos;t be perfect until we make C++14 mandatory. Until then we can either stick to CrossThreadTask and CrossThreadCopier, or suffer through the additional copying overhead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008484</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-05-11 23:24:13 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I&apos;m all for creating manual cross-thread copies at call sites, but with C++11 lambdas this incurs an additional copy for objects of types like String.

Sure, but lets keep in mind that “copy” here just means a ref/deref pair. I think that’s an OK cost.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008522</commentid>
    <comment_count>5</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-05-12 03:25:53 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; I&apos;m all for creating manual cross-thread copies at call sites, but with C++11 lambdas this incurs an additional copy for objects of types like String.
&gt; 
&gt; Sure, but lets keep in mind that “copy” here just means a ref/deref pair. I think that’s an OK cost.

OK, I&apos;ll give it a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008523</commentid>
    <comment_count>6</comment_count>
      <attachid>231284</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-05-12 03:32:17 -0700</bug_when>
    <thetext>Created attachment 231284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008700</commentid>
    <comment_count>7</comment_count>
      <attachid>231284</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-05-12 13:17:11 -0700</bug_when>
    <thetext>Comment on attachment 231284
Patch

Clearing flags on attachment: 231284

Committed r168640: &lt;http://trac.webkit.org/changeset/168640&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1008701</commentid>
    <comment_count>8</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2014-05-12 13:17:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231253</attachid>
            <date>2014-05-10 23:36:30 -0700</date>
            <delta_ts>2014-05-12 03:32:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132800-20140510233605.patch</filename>
            <type>text/plain</type>
            <size>59888</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODU5NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE0LTA1LTEwICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBDbGVhbiB1cCBDcm9zc1Ro
cmVhZFRhc2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMjgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbW92ZSB0aGUgY3JlYXRlQ2FsbGJhY2tUYXNrIG92ZXJsb2FkcyBhbmQgdGhlIHJlbGF0ZWQg
Q3Jvc3NUaHJlYWRUYXNrIGhlbHBlciBjbGFzc2VzLgorCisgICAgICAgIEluc3RlYWQsIGhhdmUg
b25lIHNpbXBsZSBDcm9zc1RocmVhZFRhc2sgY2xhc3MgdGhhdCBkZXJpdmVzIGZyb20gU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzay4KKyAgICAgICAgSXRzIHRlbXBsYXRlZCBjb25zdHJ1Y3Rv
ciB0YWtlcyBpbiB0aGUgbWV0aG9kIGFuZCB0aGUgdmFyaWFkaWMgcGFjayBvZiBwYXJhbWV0ZXJz
LiBUaGUgY3Jvc3MtdGhyZWFkCisgICAgICAgIGNvcGllcyBvZiB0aGUgcGFyYW1ldGVycyBhcmUg
dGhlbiBib3VuZCB0byB0aGF0IG1ldGhvZCBhbmQgdGhlIHJlc3VsdGluZyBiaW5kIGV4cHJlc3Np
b24gaXMgdXNlZCB0bworICAgICAgICBpbml0aWFsaXplIHRoZSBiYXNlIGNsYXNzLiBUaGUgYmlu
ZCBleHByZXNzaW9uIGlzIGNvbnN0cnVjdGVkIHdpdGggYSBwbGFjZWhvbGRlciBmb3IgdGhlCisg
ICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHBhcmFtZXRlciB0aGF0J3MgcHJvdmlkZWQg
dGhyb3VnaCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrOjpwZXJmb3JtVGFzaygpLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXI6OmRpZENvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6
OmRpZFJlY2VpdmVCaW5hcnlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpk
aWRTdGFydENsb3NpbmdIYW5kc2hha2UpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZFJlY2VpdmVNZXNz
YWdlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyOjpwcm9jZXNzUGVuZGluZ1Rhc2tzKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnNlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6
OmJ1ZmZlcmVkQW1vdW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpQZWVyOjpkaWRDb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRSZWNlaXZlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6
ZGlkUmVjZWl2ZUJpbmFyeURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRT
dGFydENsb3NpbmdIYW5kc2hha2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRSZWNlaXZlTWVzc2FnZUVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpCcmlkZ2U6Om1haW5UaHJlYWRJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6Y29u
bmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6QnJpZGdlOjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpCcmlkZ2U6OmJ1ZmZlcmVkQW1vdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmZh
aWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
OkJyaWRnZTo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnJlc3VtZSk6CisgICAgICAg
ICogZG9tL0Nyb3NzVGhyZWFkVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJlYWRU
YXNrOjpDcm9zc1RocmVhZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNr
MTo6Q3Jvc3NUaHJlYWRUYXNrMSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcm9zc1Ro
cmVhZFRhc2sxOjpwZXJmb3JtVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcm9z
c1RocmVhZFRhc2syOjpDcm9zc1RocmVhZFRhc2syKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNyb3NzVGhyZWFkVGFzazI6OnBlcmZvcm1UYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNyb3NzVGhyZWFkVGFzazM6OkNyb3NzVGhyZWFkVGFzazMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrMzo6cGVyZm9ybVRhc2spOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrNDo6Q3Jvc3NUaHJlYWRUYXNrNCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcm9zc1RocmVhZFRhc2s0OjpwZXJmb3JtVGFzayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcm9zc1RocmVhZFRhc2s1OjpDcm9zc1RocmVh
ZFRhc2s1KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzazU6OnBl
cmZvcm1UYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzazY6
OkNyb3NzVGhyZWFkVGFzazYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJl
YWRUYXNrNjo6cGVyZm9ybVRhc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NU
aHJlYWRUYXNrNzo6Q3Jvc3NUaHJlYWRUYXNrNyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDcm9zc1RocmVhZFRhc2s3OjpwZXJmb3JtVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDcm9zc1RocmVhZFRhc2s4OjpDcm9zc1RocmVhZFRhc2s4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzazg6OnBlcmZvcm1UYXNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhbGxiYWNrVGFzayk6IERlbGV0ZWQuCisgICAgICAgICog
ZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmFi
b3J0KToKKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpN
YWluVGhyZWFkQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6Y2FuY2VsKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFNlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJl
YWRCcmlkZ2U6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJU
aHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpk
aWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmFpbEFjY2Vzc0NvbnRyb2xD
aGVjayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAgICAgICogbG9hZGVyL1dvcmtl
clRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tU2Vz
c2lvbkNhY2hlcyk6CisgICAgICAgICogd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3Np
dG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6cG9zdEV4Y2Vw
dGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5
Ojpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgICogd29ya2Vycy9X
b3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdp
bmdQcm94eTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtlck9iamVjdERlc3Ryb3llZCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6Y29ubmVjdFRvSW5zcGVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5OjpkaXNjb25uZWN0RnJvbUlu
c3BlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6c2VuZE1l
c3NhZ2VUb0luc3BlY3Rvcik6CisKIDIwMTQtMDUtMTAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hv
cnRvbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLV2ViVmlldyBfdXBkYXRlU2Nyb2xsVmlld0Jh
Y2tncm91bmRdIGNodXJucyBVSS1hbmQtQ0dDb2xvcnMgd2hpbGUgcmVwYWludGluZwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsQ2xpZW50V3JhcHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHAJ
KHJldmlzaW9uIDE2ODU5NSkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9U
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw3ICszMiw2IEBACiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQogI2luY2x1ZGUgIlRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oIgogCi0jaW5jbHVkZSAiQ3Jv
c3NUaHJlYWRDb3BpZXIuaCIKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbENs
aWVudC5oIgpAQCAtMTU3LDQ5ICsxNTYsNDkgQEAgdm9pZCBUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYQogCiB2b2lkIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcjo6ZGlkQ29ubmVjdCgpCiB7Ci0gICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFr
ZV91bmlxdWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4oY3JlYXRlQ2FsbGJhY2tUYXNr
KCZkaWRDb25uZWN0Q2FsbGJhY2ssIHRoaXMpKSk7CisgICAgbV9wZW5kaW5nVGFza3MuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8Q3Jvc3NUaHJlYWRUYXNrPigmZGlkQ29ubmVjdENhbGxiYWNrLCB0
aGlzKSk7CiAgICAgaWYgKCFtX3N1c3BlbmRlZCkKICAgICAgICAgcHJvY2Vzc1BlbmRpbmdUYXNr
cygpOwogfQogCiB2b2lkIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6
ZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIG1fcGVuZGlu
Z1Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2s+KGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkUmVjZWl2ZU1lc3NhZ2VDYWxsYmFjaywgdGhpcywg
bWVzc2FnZSkpKTsKKyAgICBtX3BlbmRpbmdUYXNrcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxD
cm9zc1RocmVhZFRhc2s+KCZkaWRSZWNlaXZlTWVzc2FnZUNhbGxiYWNrLCB0aGlzLCBtZXNzYWdl
KSk7CiAgICAgaWYgKCFtX3N1c3BlbmRlZCkKICAgICAgICAgcHJvY2Vzc1BlbmRpbmdUYXNrcygp
OwogfQogCiB2b2lkIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6ZGlk
UmVjZWl2ZUJpbmFyeURhdGEoUGFzc093blB0cjxWZWN0b3I8Y2hhcj4+IGJpbmFyeURhdGEpCiB7
Ci0gICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6VGFzaz4oY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRSZWNlaXZlQmluYXJ5RGF0
YUNhbGxiYWNrLCB0aGlzLCBiaW5hcnlEYXRhKSkpOworICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPENyb3NzVGhyZWFkVGFzaz4oJmRpZFJlY2VpdmVCaW5hcnlEYXRh
Q2FsbGJhY2ssIHRoaXMsIGJpbmFyeURhdGEpKTsKICAgICBpZiAoIW1fc3VzcGVuZGVkKQogICAg
ICAgICBwcm9jZXNzUGVuZGluZ1Rhc2tzKCk7CiB9CiAKIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRVcGRhdGVCdWZmZXJlZEFtb3VudCh1bnNpZ25lZCBs
b25nIGJ1ZmZlcmVkQW1vdW50KQogewotICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVuZChzdGQ6Om1h
a2VfdW5pcXVlPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KGNyZWF0ZUNhbGxiYWNrVGFz
aygmZGlkVXBkYXRlQnVmZmVyZWRBbW91bnRDYWxsYmFjaywgdGhpcywgYnVmZmVyZWRBbW91bnQp
KSk7CisgICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8Q3Jvc3NUaHJl
YWRUYXNrPigmZGlkVXBkYXRlQnVmZmVyZWRBbW91bnRDYWxsYmFjaywgdGhpcywgYnVmZmVyZWRB
bW91bnQpKTsKICAgICBpZiAoIW1fc3VzcGVuZGVkKQogICAgICAgICBwcm9jZXNzUGVuZGluZ1Rh
c2tzKCk7CiB9CiAKIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
OjpkaWRTdGFydENsb3NpbmdIYW5kc2hha2UoKQogewotICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KGNyZWF0ZUNh
bGxiYWNrVGFzaygmZGlkU3RhcnRDbG9zaW5nSGFuZHNoYWtlQ2FsbGJhY2ssIHRoaXMpKSk7Cisg
ICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8Q3Jvc3NUaHJlYWRUYXNr
PigmZGlkU3RhcnRDbG9zaW5nSGFuZHNoYWtlQ2FsbGJhY2ssIHRoaXMpKTsKICAgICBpZiAoIW1f
c3VzcGVuZGVkKQogICAgICAgICBwcm9jZXNzUGVuZGluZ1Rhc2tzKCk7CiB9CiAKIHZvaWQgVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRDbG9zZSh1bnNpZ25lZCBs
b25nIHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50OjpDbG9z
aW5nSGFuZHNoYWtlQ29tcGxldGlvblN0YXR1cyBjbG9zaW5nSGFuZHNoYWtlQ29tcGxldGlvbiwg
dW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24pCiB7Ci0gICAgbV9wZW5k
aW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6
VGFzaz4oY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRDbG9zZUNhbGxiYWNrLCB0aGlzLCB1bmhhbmRs
ZWRCdWZmZXJlZEFtb3VudCwgY2xvc2luZ0hhbmRzaGFrZUNvbXBsZXRpb24sIGNvZGUsIHJlYXNv
bikpKTsKKyAgICBtX3BlbmRpbmdUYXNrcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxDcm9zc1Ro
cmVhZFRhc2s+KCZkaWRDbG9zZUNhbGxiYWNrLCB0aGlzLCB1bmhhbmRsZWRCdWZmZXJlZEFtb3Vu
dCwgY2xvc2luZ0hhbmRzaGFrZUNvbXBsZXRpb24sIGNvZGUsIHJlYXNvbikpOwogICAgIGlmICgh
bV9zdXNwZW5kZWQpCiAgICAgICAgIHByb2Nlc3NQZW5kaW5nVGFza3MoKTsKIH0KIAogdm9pZCBU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZFJlY2VpdmVNZXNzYWdl
RXJyb3IoKQogewotICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+KGNyZWF0ZUNhbGxiYWNrVGFzaygmZGlkUmVjZWl2
ZU1lc3NhZ2VFcnJvckNhbGxiYWNrLCB0aGlzKSkpOworICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVu
ZChzdGQ6Om1ha2VfdW5pcXVlPENyb3NzVGhyZWFkVGFzaz4oJmRpZFJlY2VpdmVNZXNzYWdlRXJy
b3JDYWxsYmFjaywgdGhpcykpOwogICAgIGlmICghbV9zdXNwZW5kZWQpCiAgICAgICAgIHByb2Nl
c3NQZW5kaW5nVGFza3MoKTsKIH0KQEAgLTIyOCw3ICsyMjcsNyBAQCB2b2lkIFRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhCiAgICAgaWYgKCFtX3N5bmNNZXRob2REb25lKSB7CiAg
ICAgICAgIC8vIFdoZW4gYSBzeW5jaHJvbm91cyBvcGVyYXRpb24gaXMgaW4gcHJvZ3Jlc3MgKGku
ZS4gdGhlIGV4ZWN1dGlvbiBzdGFjayBjb250YWlucwogICAgICAgICAvLyBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6d2FpdEZvck1ldGhvZENvbXBsZXRpb24oKSksIHdlIGNhbm5v
dCBpbnZva2UgY2FsbGJhY2tzIGluIHRoaXMgcnVuIGxvb3AuCi0gICAgICAgIG1fY29udGV4dC0+
cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXI6OnByb2Nlc3NQZW5kaW5nVGFza3NDYWxsYmFjaywgdGhpcykpOworICAgICAg
ICBtX2NvbnRleHQtPnBvc3RUYXNrKENyb3NzVGhyZWFkVGFzaygmVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyOjpwcm9jZXNzUGVuZGluZ1Rhc2tzQ2FsbGJhY2ssIHRoaXMp
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuY3BwCShyZXZpc2lvbiAxNjg1OTUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODAsNyArMTgwLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6UAogICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCB8fCAh
bV93b3JrZXJDbGllbnRXcmFwcGVyKQogICAgICAgICByZXR1cm47CiAgICAgVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgc2VuZFJlcXVlc3RSZXN1bHQgPSBtX21haW5XZWJT
b2NrZXRDaGFubmVsLT5zZW5kKG1lc3NhZ2UpOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tG
b3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckdsb2Jh
bFNjb3BlRGlkU2VuZCwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBzZW5kUmVxdWVzdFJlc3VsdCks
IG1fdGFza01vZGUpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJH
bG9iYWxTY29wZShDcm9zc1RocmVhZFRhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkU2VuZCwgbV93
b3JrZXJDbGllbnRXcmFwcGVyLCBzZW5kUmVxdWVzdFJlc3VsdCksIG1fdGFza01vZGUpOwogfQog
CiB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpzZW5kKGNvbnN0
IEFycmF5QnVmZmVyJiBiaW5hcnlEYXRhKQpAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlAKICAgICBpZiAoIW1fbWFpbldlYlNvY2tldENo
YW5uZWwgfHwgIW1fd29ya2VyQ2xpZW50V3JhcHBlcikKICAgICAgICAgcmV0dXJuOwogICAgIFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IHNlbmRSZXF1ZXN0UmVzdWx0ID0g
bV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+c2VuZChiaW5hcnlEYXRhLCAwLCBiaW5hcnlEYXRhLmJ5
dGVMZW5ndGgoKSk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckds
b2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRTZW5kLCBt
X3dvcmtlckNsaWVudFdyYXBwZXIsIHNlbmRSZXF1ZXN0UmVzdWx0KSwgbV90YXNrTW9kZSk7Cisg
ICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3Nz
VGhyZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRTZW5kLCBtX3dvcmtlckNsaWVudFdyYXBw
ZXIsIHNlbmRSZXF1ZXN0UmVzdWx0KSwgbV90YXNrTW9kZSk7CiB9CiAKIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnNlbmQoQmxvYiYgYmluYXJ5RGF0YSkKQEAg
LTE5OCw3ICsxOTgsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQ
CiAgICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFubmVsIHx8ICFtX3dvcmtlckNsaWVudFdyYXBw
ZXIpCiAgICAgICAgIHJldHVybjsKICAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2Vu
ZFJlc3VsdCBzZW5kUmVxdWVzdFJlc3VsdCA9IG1fbWFpbldlYlNvY2tldENoYW5uZWwtPnNlbmQo
YmluYXJ5RGF0YSk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckds
b2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRTZW5kLCBt
X3dvcmtlckNsaWVudFdyYXBwZXIsIHNlbmRSZXF1ZXN0UmVzdWx0KSwgbV90YXNrTW9kZSk7Cisg
ICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3Nz
VGhyZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRTZW5kLCBtX3dvcmtlckNsaWVudFdyYXBw
ZXIsIHNlbmRSZXF1ZXN0UmVzdWx0KSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdv
cmtlckdsb2JhbFNjb3BlRGlkR2V0QnVmZmVyZWRBbW91bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQp
CkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6UAogICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCB8fCAhbV93b3JrZXJDbGllbnRX
cmFwcGVyKQogICAgICAgICByZXR1cm47CiAgICAgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3Vu
dCA9IG1fbWFpbldlYlNvY2tldENoYW5uZWwtPmJ1ZmZlcmVkQW1vdW50KCk7Ci0gICAgbV9sb2Fk
ZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNr
VGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRHZXRCdWZmZXJlZEFtb3VudCwgbV93b3JrZXJDbGll
bnRXcmFwcGVyLCBidWZmZXJlZEFtb3VudCksIG1fdGFza01vZGUpOworICAgIG1fbG9hZGVyUHJv
eHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShDcm9zc1RocmVhZFRhc2soJndv
cmtlckdsb2JhbFNjb3BlRGlkR2V0QnVmZmVyZWRBbW91bnQsIG1fd29ya2VyQ2xpZW50V3JhcHBl
ciwgYnVmZmVyZWRBbW91bnQpLCBtX3Rhc2tNb2RlKTsKIH0KIAogdm9pZCBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6Y2xvc2UoaW50IGNvZGUsIGNvbnN0IFN0cmluZyYg
cmVhc29uKQpAQCAtMjY4LDcgKzI2OCw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3Bl
RGlkQ29ubmVjdCgKIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6
OmRpZENvbm5lY3QoKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9sb2Fk
ZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNr
VGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRDb25uZWN0LCBtX3dvcmtlckNsaWVudFdyYXBwZXIs
IG1fbWFpbldlYlNvY2tldENoYW5uZWwtPnN1YnByb3RvY29sKCksIG1fbWFpbldlYlNvY2tldENo
YW5uZWwtPmV4dGVuc2lvbnMoKSksIG1fdGFza01vZGUpOworICAgIG1fbG9hZGVyUHJveHkucG9z
dFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShDcm9zc1RocmVhZFRhc2soJndvcmtlckds
b2JhbFNjb3BlRGlkQ29ubmVjdCwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBtX21haW5XZWJTb2Nr
ZXRDaGFubmVsLT5zdWJwcm90b2NvbCgpLCBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5leHRlbnNp
b25zKCkpLCBtX3Rhc2tNb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgd29ya2VyR2xvYmFsU2NvcGVE
aWRSZWNlaXZlTWVzc2FnZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVm
UHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50
V3JhcHBlciwgY29uc3QgU3RyaW5nJiBtZXNzYWdlKQpAQCAtMjgwLDcgKzI4MCw3IEBAIHN0YXRp
YyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZU0KIHZvaWQgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fbG9hZGVyUHJv
eHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShjcmVhdGVDYWxsYmFja1Rhc2so
Jndvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZU1lc3NhZ2UsIG1fd29ya2VyQ2xpZW50V3JhcHBl
ciwgbWVzc2FnZSksIG1fdGFza01vZGUpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JN
b2RlVG9Xb3JrZXJHbG9iYWxTY29wZShDcm9zc1RocmVhZFRhc2soJndvcmtlckdsb2JhbFNjb3Bl
RGlkUmVjZWl2ZU1lc3NhZ2UsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgbWVzc2FnZSksIG1fdGFz
a01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURpZFJlY2VpdmVCaW5h
cnlEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBQ
YXNzT3duUHRyPFZlY3RvcjxjaGFyPj4gYmluYXJ5RGF0YSkKQEAgLTI5Miw3ICsyOTIsNyBAQCBz
dGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURpZFJlY2VpdmVCCiB2b2lkIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRSZWNlaXZlQmluYXJ5RGF0YShQYXNzT3du
UHRyPFZlY3RvcjxjaGFyPj4gYmluYXJ5RGF0YSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29w
ZShjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZUJpbmFyeURh
dGEsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgYmluYXJ5RGF0YSksIG1fdGFza01vZGUpOworICAg
IG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShDcm9zc1Ro
cmVhZFRhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZUJpbmFyeURhdGEsIG1fd29ya2Vy
Q2xpZW50V3JhcHBlciwgYmluYXJ5RGF0YSksIG1fdGFza01vZGUpOwogfQogCiBzdGF0aWMgdm9p
ZCB3b3JrZXJHbG9iYWxTY29wZURpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVk
QW1vdW50KQpAQCAtMzA0LDcgKzMwNCw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3Bl
RGlkVXBkYXRlQnUKIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6
OmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQpCiB7
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNr
Rm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJHbG9i
YWxTY29wZURpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50LCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGJ1
ZmZlcmVkQW1vdW50KSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zv
ck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhyZWFkVGFzaygmd29ya2VyR2xvYmFsU2Nv
cGVEaWRVcGRhdGVCdWZmZXJlZEFtb3VudCwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBidWZmZXJl
ZEFtb3VudCksIG1fdGFza01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29w
ZURpZFN0YXJ0Q2xvc2luZ0hhbmRzaGFrZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29y
a2VyQ2xpZW50V3JhcHBlcikKQEAgLTMxNiw3ICszMTYsNyBAQCBzdGF0aWMgdm9pZCB3b3JrZXJH
bG9iYWxTY29wZURpZFN0YXJ0Q2xvCiB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpQZWVyOjpkaWRTdGFydENsb3NpbmdIYW5kc2hha2UoKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckds
b2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRTdGFydENs
b3NpbmdIYW5kc2hha2UsIG1fd29ya2VyQ2xpZW50V3JhcHBlciksIG1fdGFza01vZGUpOworICAg
IG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShDcm9zc1Ro
cmVhZFRhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkU3RhcnRDbG9zaW5nSGFuZHNoYWtlLCBtX3dv
cmtlckNsaWVudFdyYXBwZXIpLCBtX3Rhc2tNb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgd29ya2Vy
R2xvYmFsU2NvcGVEaWRDbG9zZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNz
UmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xp
ZW50V3JhcHBlciwgdW5zaWduZWQgbG9uZyB1bmhhbmRsZWRCdWZmZXJlZEFtb3VudCwgV2ViU29j
a2V0Q2hhbm5lbENsaWVudDo6Q2xvc2luZ0hhbmRzaGFrZUNvbXBsZXRpb25TdGF0dXMgY2xvc2lu
Z0hhbmRzaGFrZUNvbXBsZXRpb24sIHVuc2lnbmVkIHNob3J0IGNvZGUsIGNvbnN0IFN0cmluZyYg
cmVhc29uKQpAQCAtMzI5LDcgKzMyOSw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OlAKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIG1fbWFpbldl
YlNvY2tldENoYW5uZWwgPSAwOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9X
b3JrZXJHbG9iYWxTY29wZShjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckdsb2JhbFNjb3BlRGlk
Q2xvc2UsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgdW5oYW5kbGVkQnVmZmVyZWRBbW91bnQsIGNs
b3NpbmdIYW5kc2hha2VDb21wbGV0aW9uLCBjb2RlLCByZWFzb24pLCBtX3Rhc2tNb2RlKTsKKyAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoQ3Jvc3NU
aHJlYWRUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZENsb3NlLCBtX3dvcmtlckNsaWVudFdyYXBw
ZXIsIHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50LCBjbG9zaW5nSGFuZHNoYWtlQ29tcGxldGlvbiwg
Y29kZSwgcmVhc29uKSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckdsb2Jh
bFNjb3BlRGlkUmVjZWl2ZU1lc3NhZ2VFcnJvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4g
d29ya2VyQ2xpZW50V3JhcHBlcikKQEAgLTM0MSw3ICszNDEsNyBAQCBzdGF0aWMgdm9pZCB3b3Jr
ZXJHbG9iYWxTY29wZURpZFJlY2VpdmVNCiB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpQZWVyOjpkaWRSZWNlaXZlTWVzc2FnZUVycm9yKCkKIHsKICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJH
bG9iYWxTY29wZShjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2
ZU1lc3NhZ2VFcnJvciwgbV93b3JrZXJDbGllbnRXcmFwcGVyKSwgbV90YXNrTW9kZSk7CisgICAg
bV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhy
ZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlTWVzc2FnZUVycm9yLCBtX3dvcmtl
ckNsaWVudFdyYXBwZXIpLCBtX3Rhc2tNb2RlKTsKIH0KIAogV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OkJyaWRnZTo6QnJpZGdlKFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBQYXNzUmVmUHRyPFdv
cmtlckdsb2JhbFNjb3BlPiB3b3JrZXJHbG9iYWxTY29wZSwgY29uc3QgU3RyaW5nJiB0YXNrTW9k
ZSkKQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpCCiAgICAgICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3JrZXJH
bG9iYWxTY29wZSgpKTsKICAgICAgICAgaWYgKGNsaWVudFdyYXBwZXItPmZhaWxlZFdlYlNvY2tl
dENoYW5uZWxDcmVhdGlvbigpKSB7CiAgICAgICAgICAgICAvLyBJZiBCcmlkZ2U6OmluaXRpYWxp
emUoKSBxdWl0dGVkIGVhcmxpZXIsIHdlIG5lZWQgdG8ga2ljayBtYWluVGhyZWFkRGVzdHJveSgp
IHRvIGRlbGV0ZSB0aGUgcGVlci4KLSAgICAgICAgICAgIGxvYWRlclByb3h5LT5wb3N0VGFza1Rv
TG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6Om1haW5UaHJlYWREZXN0cm95LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHBlZXJQdHIpKSk7
CisgICAgICAgICAgICBsb2FkZXJQcm94eS0+cG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRh
c2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkRGVzdHJveSwg
QWxsb3dDcm9zc1RocmVhZEFjY2VzcyhwZWVyUHRyKSkpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIGNsaWVudFdyYXBwZXItPmRpZENyZWF0ZVdlYlNvY2tldENoYW5uZWwocGVlclB0cik7
CiAgICAgfSB9LCB0YXNrTW9kZSk7CkBAIC0zODYsOSArMzg2LDcgQEAgdm9pZCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QgogICAgIEFTU0VSVCghbV9wZWVyKTsKICAgICBzZXRN
ZXRob2ROb3RDb21wbGV0ZWQoKTsKICAgICBSZWY8QnJpZGdlPiBwcm90ZWN0KCp0aGlzKTsKLSAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoCi0gICAgICAgIGNyZWF0ZUNhbGxiYWNr
VGFzaygmQnJpZGdlOjptYWluVGhyZWFkSW5pdGlhbGl6ZSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MoJm1fbG9hZGVyUHJveHkpLCBtX3dvcmtlckNs
aWVudFdyYXBwZXIsIG1fdGFza01vZGUpKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9M
b2FkZXIoQ3Jvc3NUaHJlYWRUYXNrKCZCcmlkZ2U6Om1haW5UaHJlYWRJbml0aWFsaXplLCBBbGxv
d0Nyb3NzVGhyZWFkQWNjZXNzKCZtX2xvYWRlclByb3h5KSwgbV93b3JrZXJDbGllbnRXcmFwcGVy
LCBtX3Rhc2tNb2RlKSk7CiAgICAgd2FpdEZvck1ldGhvZENvbXBsZXRpb24oKTsKICAgICAvLyBt
X3BlZXIgbWF5IGJlIG51bGwgd2hlbiB0aGUgbmVzdGVkIHJ1bmxvb3AgZXhpdGVkIGJlZm9yZSBh
IHBlZXIgaGFzIGNyZWF0ZWQuCiAgICAgbV9wZWVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLT5w
ZWVyKCk7CkBAIC00MTAsNyArNDA4LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6QgogICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIpOwogICAgIGlmICgh
bV9wZWVyKQogICAgICAgICByZXR1cm47Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9h
ZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
Om1haW5UaHJlYWRDb25uZWN0LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVlciksIHVybCwg
cHJvdG9jb2wpKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NUaHJl
YWRUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZENvbm5l
Y3QsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgdXJsLCBwcm90b2NvbCkpOwogfQog
CiB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkU2VuZChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQZWVyKiBwZWVyLCBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UpCkBAIC00NDcsNyArNDQ1LDcgQEAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
OlNlbmRSZXN1bHQgVwogICAgIGlmICghbV93b3JrZXJDbGllbnRXcmFwcGVyIHx8ICFtX3BlZXIp
CiAgICAgICAgIHJldHVybiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2VuZEZhaWw7CiAg
ICAgc2V0TWV0aG9kTm90Q29tcGxldGVkKCk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1Rv
TG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6Om1haW5UaHJlYWRTZW5kLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVlciksIG1lc3Nh
Z2UpKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NUaHJlYWRUYXNr
KCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmQsIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgbWVzc2FnZSkpOwogICAgIFJlZjxCcmlkZ2U+IHBy
b3RlY3QoKnRoaXMpOwogICAgIHdhaXRGb3JNZXRob2RDb21wbGV0aW9uKCk7CiAgICAgVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKiBjbGllbnRXcmFwcGVyID0gbV93b3Jr
ZXJDbGllbnRXcmFwcGVyLmdldCgpOwpAQCAtNDY1LDcgKzQ2Myw3IEBAIFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpTZW5kUmVzdWx0IFcKICAgICBpZiAoYmluYXJ5RGF0YS5ieXRlTGVuZ3Ro
KCkpCiAgICAgICAgIG1lbWNweShkYXRhLT5kYXRhKCksIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIq
PihiaW5hcnlEYXRhLmRhdGEoKSkgKyBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKTsKICAgICBzZXRN
ZXRob2ROb3RDb21wbGV0ZWQoKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFp
blRocmVhZFNlbmRBcnJheUJ1ZmZlciwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhtX3BlZXIpLCBk
YXRhLnJlbGVhc2UoKSkpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihDcm9z
c1RocmVhZFRhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFk
U2VuZEFycmF5QnVmZmVyLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVlciksIGRhdGEucmVs
ZWFzZSgpKSk7CiAgICAgUmVmPEJyaWRnZT4gcHJvdGVjdCgqdGhpcyk7CiAgICAgd2FpdEZvck1l
dGhvZENvbXBsZXRpb24oKTsKICAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXIqIGNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCk7CkBAIC00
NzksNyArNDc3LDcgQEAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgVwog
ICAgIGlmICghbV93b3JrZXJDbGllbnRXcmFwcGVyIHx8ICFtX3BlZXIpCiAgICAgICAgIHJldHVy
biBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2VuZEZhaWw7CiAgICAgc2V0TWV0aG9kTm90
Q29tcGxldGVkKCk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNh
bGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRT
ZW5kQmxvYiwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhtX3BlZXIpLCBiaW5hcnlEYXRhLnVybCgp
LCBiaW5hcnlEYXRhLnR5cGUoKSwgYmluYXJ5RGF0YS5zaXplKCkpKTsKKyAgICBtX2xvYWRlclBy
b3h5LnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NUaHJlYWRUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmRCbG9iLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNz
KG1fcGVlciksIGJpbmFyeURhdGEudXJsKCksIGJpbmFyeURhdGEudHlwZSgpLCBiaW5hcnlEYXRh
LnNpemUoKSkpOwogICAgIFJlZjxCcmlkZ2U+IHByb3RlY3QoKnRoaXMpOwogICAgIHdhaXRGb3JN
ZXRob2RDb21wbGV0aW9uKCk7CiAgICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyKiBjbGllbnRXcmFwcGVyID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpOwpAQCAt
NTAyLDcgKzUwMCw3IEBAIHVuc2lnbmVkIGxvbmcgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldEMK
ICAgICBpZiAoIW1fd29ya2VyQ2xpZW50V3JhcHBlciB8fCAhbV9wZWVyKQogICAgICAgICByZXR1
cm4gMDsKICAgICBzZXRNZXRob2ROb3RDb21wbGV0ZWQoKTsKLSAgICBtX2xvYWRlclByb3h5LnBv
c3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6bWFpblRocmVhZEJ1ZmZlcmVkQW1vdW50LCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKG1fcGVlcikpKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NU
aHJlYWRUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZEJ1
ZmZlcmVkQW1vdW50LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVlcikpKTsKICAgICBSZWY8
QnJpZGdlPiBwcm90ZWN0KCp0aGlzKTsKICAgICB3YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpOwog
ICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlciogY2xpZW50V3JhcHBl
ciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKQEAgLTUyNCw3ICs1MjIsNyBAQCB2b2lk
IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCCiB7CiAgICAgaWYgKCFtX3BlZXIp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRo
cmVhZENsb3NlLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVlciksIGNvZGUsIHJlYXNvbikp
OworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRhc2soJldv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkQ2xvc2UsIEFsbG93Q3Jv
c3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgY29kZSwgcmVhc29uKSk7CiB9CiAKIHZvaWQgV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRGYWlsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFBlZXIqIHBlZXIsIGNvbnN0IFN0cmluZyYgcmVhc29uKQpAQCAt
NTQwLDcgKzUzOCw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkIK
IHsKICAgICBpZiAoIW1fcGVlcikKICAgICAgICAgcmV0dXJuOwotICAgIG1fbG9hZGVyUHJveHku
cG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJldvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjptYWluVGhyZWFkRmFpbCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhtX3Bl
ZXIpLCByZWFzb24pKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NU
aHJlYWRUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZEZh
aWwsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgcmVhc29uKSk7CiB9CiAKIHZvaWQg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWREZXN0cm95KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBlZXIqIHBlZXJQdHIpCkBAIC01NTQsNyArNTUy
LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QgogewogICAgIGNs
ZWFyQ2xpZW50V3JhcHBlcigpOwogICAgIGlmIChtX3BlZXIpIHsKLSAgICAgICAgbV9sb2FkZXJQ
cm94eS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWREZXN0cm95LCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKG1fcGVlcikpKTsKKyAgICAgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKENy
b3NzVGhyZWFkVGFzaygmV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJl
YWREZXN0cm95LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVlcikpKTsKICAgICAgICAgbV9w
ZWVyID0gbnVsbHB0cjsKICAgICB9CiAgICAgbV93b3JrZXJHbG9iYWxTY29wZSA9IG51bGxwdHI7
CkBAIC01NzMsNyArNTcxLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6QgogewogICAgIGlmICghbV9wZWVyKQogICAgICAgICByZXR1cm47Ci0gICAgbV9sb2FkZXJQ
cm94eS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRTdXNwZW5kLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKG1fcGVlcikpKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NU
aHJlYWRUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFN1
c3BlbmQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSkpOwogfQogCiB2b2lkIFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkUmVzdW1lKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFBlZXIqIHBlZXIpCkBAIC01ODksNyArNTg3LDcgQEAgdm9p
ZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QgogewogICAgIGlmICghbV9wZWVy
KQogICAgICAgICByZXR1cm47Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5U
aHJlYWRSZXN1bWUsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSkpOworICAgIG1fbG9h
ZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRhc2soJldvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkUmVzdW1lLCBBbGxvd0Nyb3NzVGhyZWFkQWNj
ZXNzKG1fcGVlcikpKTsKIH0KIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6QnJpZGdlOjpjbGVhckNsaWVudFdyYXBwZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0Nyb3NzVGhyZWFkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Dcm9z
c1RocmVhZFRhc2suaAkocmV2aXNpb24gMTY4NTk1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Ny
b3NzVGhyZWFkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw0MjIgKzM4LDE1IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gVHJhaXRzIGZvciB0aGUgQ3Jvc3NUaHJlYWRUYXNrLgot
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkVGFza1RyYWl0cyB7Ci0gICAg
dHlwZWRlZiBjb25zdCBUJiBQYXJhbVR5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFQqPiB7Ci0gICAgdHlwZWRlZiBUKiBQYXJhbVR5
cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRUYXNrVHJh
aXRzPFBhc3NSZWZQdHI8VD4+IHsKLSAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VD4gUGFyYW1UeXBl
OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFkVGFza1RyYWl0
czxzdGQ6OnVuaXF1ZV9wdHI8VD4+IHsKLSAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxUPiBQ
YXJhbVR5cGU7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxPgotY2xh
c3MgQ3Jvc3NUaHJlYWRUYXNrMSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqTWV0aG9k
KShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxKTsKLSAgICB0eXBlZGVmIENyb3NzVGhyZWFk
VGFzazE8UDEsIE1QMT4gQ3Jvc3NUaHJlYWRUYXNrOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKLQotICAgIENyb3NzVGhy
ZWFkVGFzazEoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEpCi0gICAgICAgIDogbV9t
ZXRob2QobWV0aG9kKQotICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCi0gICAgewotICAgICAgICAoKm1fbWV0aG9kKShjb250ZXh0LCBtX3BhcmFtZXRlcjEp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNZXRob2QgbV9tZXRob2Q7Ci0gICAgUDEgbV9wYXJh
bWV0ZXIxOwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5h
bWUgUDIsIHR5cGVuYW1lIE1QMj4KLWNsYXNzIENyb3NzVGhyZWFkVGFzazIgewotcHVibGljOgot
ICAgIHR5cGVkZWYgdm9pZCAoKk1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwg
TVAyKTsKLSAgICB0eXBlZGVmIENyb3NzVGhyZWFkVGFzazI8UDEsIE1QMSwgUDIsIE1QMj4gQ3Jv
c3NUaHJlYWRUYXNrOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7Ci0KLSAgICBDcm9zc1RocmVhZFRhc2sy
KE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMikKLSAg
ICAgICAgOiBtX21ldGhvZChtZXRob2QpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRl
cjEpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAg
ICB7Ci0gICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0
ZXIyKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWV0aG9kIG1fbWV0aG9kOwotICAgIFAxIG1f
cGFyYW1ldGVyMTsKLSAgICBQMiBtX3BhcmFtZXRlcjI7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQ
MywgdHlwZW5hbWUgTVAzPgotY2xhc3MgQ3Jvc3NUaHJlYWRUYXNrMyB7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIs
IE1QMyk7Ci0gICAgdHlwZWRlZiBDcm9zc1RocmVhZFRhc2szPFAxLCBNUDEsIFAyLCBNUDIsIFAz
LCBNUDM+IENyb3NzVGhyZWFkVGFzazsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJhbTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJhbVR5cGUgUGFyYW0yOwotICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKLQot
ICAgIENyb3NzVGhyZWFkVGFzazMoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBh
cmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMykKLSAgICAgICAgOiBtX21ldGhvZCht
ZXRob2QpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCi0gICAgICAgICwgbV9w
YXJhbWV0ZXIyKHBhcmFtZXRlcjIpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMp
Ci0gICAgewotICAgIH0KLQotICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFy
YW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBNZXRob2QgbV9tZXRob2Q7Ci0gICAgUDEgbV9wYXJhbWV0ZXIxOwotICAgIFAyIG1fcGFy
YW1ldGVyMjsKLSAgICBQMyBtX3BhcmFtZXRlcjM7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQ
MSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywg
dHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgotY2xhc3MgQ3Jvc3NUaHJl
YWRUYXNrNCB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0KTsKLSAgICB0eXBlZGVmIENyb3NzVGhy
ZWFkVGFzazQ8UDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QND4gQ3Jvc3NUaHJlYWRU
YXNrOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFy
YW1UeXBlIFBhcmFtMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0
czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVh
ZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOwotICAgIHR5cGVkZWYgdHlwZW5hbWUg
Q3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKLQotICAgIENyb3Nz
VGhyZWFkVGFzazQoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJh
bWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQpCi0gICAgICAgIDog
bV9tZXRob2QobWV0aG9kKQotICAgICAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQotICAg
ICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIyKQotICAgICAgICAsIG1fcGFyYW1ldGVyMyhw
YXJhbWV0ZXIzKQotICAgICAgICAsIG1fcGFyYW1ldGVyNChwYXJhbWV0ZXI0KQotICAgIHsKLSAg
ICB9Ci0KLSAgICB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQpCi0gICAgewotICAgICAgICAoKm1fbWV0aG9kKShjb250ZXh0LCBtX3BhcmFtZXRlcjEsIG1f
cGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRlcjQpOwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBNZXRob2QgbV9tZXRob2Q7Ci0gICAgUDEgbV9wYXJhbWV0ZXIxOwotICAgIFAyIG1f
cGFyYW1ldGVyMjsKLSAgICBQMyBtX3BhcmFtZXRlcjM7Ci0gICAgUDQgbV9wYXJhbWV0ZXI0Owot
fTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5
cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVu
YW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNT4KLWNsYXNzIENyb3NzVGhyZWFkVGFz
azUgewotcHVibGljOgotICAgIHR5cGVkZWYgdm9pZCAoKk1ldGhvZCkoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KTsKLSAgICB0eXBlZGVmIENyb3NzVGhy
ZWFkVGFzazU8UDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QNCwgUDUsIE1QNT4gQ3Jv
c3NUaHJlYWRUYXNrOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOwotICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQ
YXJhbTU7Ci0KLSAgICBDcm9zc1RocmVhZFRhc2s1KE1ldGhvZCBtZXRob2QsIFBhcmFtMSBwYXJh
bWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFtNCBwYXJh
bWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSkKLSAgICAgICAgOiBtX21ldGhvZChtZXRob2QpCi0g
ICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIy
KHBhcmFtZXRlcjIpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCi0gICAgICAg
ICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCi0gICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFt
ZXRlcjUpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQs
IG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwg
bV9wYXJhbWV0ZXI1KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTWV0aG9kIG1fbWV0aG9kOwot
ICAgIFAxIG1fcGFyYW1ldGVyMTsKLSAgICBQMiBtX3BhcmFtZXRlcjI7Ci0gICAgUDMgbV9wYXJh
bWV0ZXIzOwotICAgIFA0IG1fcGFyYW1ldGVyNDsKLSAgICBQNSBtX3BhcmFtZXRlcjU7Ci19Owot
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5h
bWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUg
TVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1LCB0eXBlbmFtZSBQNiwgdHlwZW5hbWUgTVA2
PgotY2xhc3MgQ3Jvc3NUaHJlYWRUYXNrNiB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgq
TWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUs
IE1QNik7Ci0gICAgdHlwZWRlZiBDcm9zc1RocmVhZFRhc2s2PFAxLCBNUDEsIFAyLCBNUDIsIFAz
LCBNUDMsIFA0LCBNUDQsIFA1LCBNUDUsIFA2LCBNUDY+IENyb3NzVGhyZWFkVGFzazsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMT46OlBhcmFtVHlwZSBQYXJh
bTE7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDI+OjpQYXJh
bVR5cGUgUGFyYW0yOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAzPjo6UGFyYW1UeXBlIFBhcmFtMzsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQND46OlBhcmFtVHlwZSBQYXJhbTQ7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDU+OjpQYXJhbVR5cGUgUGFyYW01OwotICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA2Pjo6UGFyYW1UeXBlIFBhcmFtNjsKLQot
ICAgIENyb3NzVGhyZWFkVGFzazYoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBh
cmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFtZXRlcjQsIFBh
cmFtNSBwYXJhbWV0ZXI1LCBQYXJhbTYgcGFyYW1ldGVyNikKLSAgICAgICAgOiBtX21ldGhvZCht
ZXRob2QpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCi0gICAgICAgICwgbV9w
YXJhbWV0ZXIyKHBhcmFtZXRlcjIpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMp
Ci0gICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCi0gICAgICAgICwgbV9wYXJhbWV0
ZXI1KHBhcmFtZXRlcjUpCi0gICAgICAgICwgbV9wYXJhbWV0ZXI2KHBhcmFtZXRlcjYpCi0gICAg
ewotICAgIH0KLQotICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCkKLSAgICB7Ci0gICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVy
MSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1
LCBtX3BhcmFtZXRlcjYpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNZXRob2QgbV9tZXRob2Q7
Ci0gICAgUDEgbV9wYXJhbWV0ZXIxOwotICAgIFAyIG1fcGFyYW1ldGVyMjsKLSAgICBQMyBtX3Bh
cmFtZXRlcjM7Ci0gICAgUDQgbV9wYXJhbWV0ZXI0OwotICAgIFA1IG1fcGFyYW1ldGVyNTsKLSAg
ICBQNiBtX3BhcmFtZXRlcjY7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
TVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAz
LCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1LCB0
eXBlbmFtZSBQNiwgdHlwZW5hbWUgTVA2LCB0eXBlbmFtZSBQNywgdHlwZW5hbWUgTVA3PgotY2xh
c3MgQ3Jvc3NUaHJlYWRUYXNrNyB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqTWV0aG9k
KShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUsIE1QNiwg
TVA3KTsKLSAgICB0eXBlZGVmIENyb3NzVGhyZWFkVGFzazc8UDEsIE1QMSwgUDIsIE1QMiwgUDMs
IE1QMywgUDQsIE1QNCwgUDUsIE1QNSwgUDYsIE1QNiwgUDcsIE1QNz4gQ3Jvc3NUaHJlYWRUYXNr
OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1U
eXBlIFBhcmFtMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQ
Mj46OlBhcmFtVHlwZSBQYXJhbTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRh
c2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jv
c3NUaHJlYWRUYXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKLSAgICB0eXBlZGVmIHR5
cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQYXJhbTU7Ci0gICAg
dHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDY+OjpQYXJhbVR5cGUgUGFy
YW02OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA3Pjo6UGFy
YW1UeXBlIFBhcmFtNzsKLQotICAgIENyb3NzVGhyZWFkVGFzazcoTWV0aG9kIG1ldGhvZCwgUGFy
YW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFy
YW00IHBhcmFtZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1LCBQYXJhbTYgcGFyYW1ldGVyNiwgUGFy
YW03IHBhcmFtZXRlcjcpCi0gICAgICAgIDogbV9tZXRob2QobWV0aG9kKQotICAgICAgICAsIG1f
cGFyYW1ldGVyMShwYXJhbWV0ZXIxKQotICAgICAgICAsIG1fcGFyYW1ldGVyMihwYXJhbWV0ZXIy
KQotICAgICAgICAsIG1fcGFyYW1ldGVyMyhwYXJhbWV0ZXIzKQotICAgICAgICAsIG1fcGFyYW1l
dGVyNChwYXJhbWV0ZXI0KQotICAgICAgICAsIG1fcGFyYW1ldGVyNShwYXJhbWV0ZXI1KQotICAg
ICAgICAsIG1fcGFyYW1ldGVyNihwYXJhbWV0ZXI2KQotICAgICAgICAsIG1fcGFyYW1ldGVyNyhw
YXJhbWV0ZXI3KQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCi0gICAgewotICAgICAgICAoKm1fbWV0aG9kKShjb250
ZXh0LCBtX3BhcmFtZXRlcjEsIG1fcGFyYW1ldGVyMiwgbV9wYXJhbWV0ZXIzLCBtX3BhcmFtZXRl
cjQsIG1fcGFyYW1ldGVyNSwgbV9wYXJhbWV0ZXI2LCBtX3BhcmFtZXRlcjcpOwotICAgIH0KLQot
cHJpdmF0ZToKLSAgICBNZXRob2QgbV9tZXRob2Q7Ci0gICAgUDEgbV9wYXJhbWV0ZXIxOwotICAg
IFAyIG1fcGFyYW1ldGVyMjsKLSAgICBQMyBtX3BhcmFtZXRlcjM7Ci0gICAgUDQgbV9wYXJhbWV0
ZXI0OwotICAgIFA1IG1fcGFyYW1ldGVyNTsKLSAgICBQNiBtX3BhcmFtZXRlcjY7Ci0gICAgUDcg
bV9wYXJhbWV0ZXI3OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwg
dHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMywgdHlw
ZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1lIE1QNSwgdHlwZW5h
bWUgUDYsIHR5cGVuYW1lIE1QNiwgdHlwZW5hbWUgUDcsIHR5cGVuYW1lIE1QNywgdHlwZW5hbWUg
UDgsIHR5cGVuYW1lIE1QOD4KLWNsYXNzIENyb3NzVGhyZWFkVGFzazggeworY2xhc3MgQ3Jvc3NU
aHJlYWRUYXNrIDogcHVibGljIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgewogcHVibGlj
OgotICAgIHR5cGVkZWYgdm9pZCAoKk1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1Q
MSwgTVAyLCBNUDMsIE1QNCwgTVA1LCBNUDYsIE1QNywgTVA4KTsKLSAgICB0eXBlZGVmIENyb3Nz
VGhyZWFkVGFzazg8UDEsIE1QMSwgUDIsIE1QMiwgUDMsIE1QMywgUDQsIE1QNCwgUDUsIE1QNSwg
UDYsIE1QNiwgUDcsIE1QNywgUDgsIE1QOD4gQ3Jvc3NUaHJlYWRUYXNrOwotICAgIHR5cGVkZWYg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKLSAg
ICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQ
YXJhbTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQ
YXJhbVR5cGUgUGFyYW0zOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJh
aXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhy
ZWFkVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQYXJhbTU7Ci0gICAgdHlwZWRlZiB0eXBlbmFt
ZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDY+OjpQYXJhbVR5cGUgUGFyYW02OwotICAgIHR5cGVk
ZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA3Pjo6UGFyYW1UeXBlIFBhcmFtNzsK
LSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQOD46OlBhcmFtVHlw
ZSBQYXJhbTg7Ci0gICAgCi0gICAgQ3Jvc3NUaHJlYWRUYXNrOChNZXRob2QgbWV0aG9kLCBQYXJh
bTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJh
bTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2LCBQYXJh
bTcgcGFyYW1ldGVyNywgUGFyYW04IHBhcmFtZXRlcjgpCi0gICAgOiBtX21ldGhvZChtZXRob2Qp
Ci0gICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKLSAgICAsIG1fcGFyYW1ldGVyMihwYXJh
bWV0ZXIyKQotICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCi0gICAgLCBtX3BhcmFtZXRl
cjQocGFyYW1ldGVyNCkKLSAgICAsIG1fcGFyYW1ldGVyNShwYXJhbWV0ZXI1KQotICAgICwgbV9w
YXJhbWV0ZXI2KHBhcmFtZXRlcjYpCi0gICAgLCBtX3BhcmFtZXRlcjcocGFyYW1ldGVyNykKLSAg
ICAsIG1fcGFyYW1ldGVyOChwYXJhbWV0ZXI4KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE1ldGhvZCwgdHlwZW5hbWUuLi4gUGFyYW1ldGVycz4KKyAgICBDcm9zc1Ro
cmVhZFRhc2soTWV0aG9kIG1ldGhvZCwgY29uc3QgUGFyYW1ldGVycyYuLi4gcGFyYW1ldGVycykK
KyAgICAgICAgOiBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrKHN0ZDo6YmluZChtZXRob2Qs
IHN0ZDo6cGxhY2Vob2xkZXJzOjpfMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UGFyYW1l
dGVycz46OlR5cGUoQ3Jvc3NUaHJlYWRDb3BpZXI8UGFyYW1ldGVycz46OmNvcHkocGFyYW1ldGVy
cykpLi4uKSkKICAgICB7Ci0gICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVy
MSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCwgbV9wYXJhbWV0ZXI1
LCBtX3BhcmFtZXRlcjYsIG1fcGFyYW1ldGVyNywgbV9wYXJhbWV0ZXI4KTsKICAgICB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIE1ldGhvZCBtX21ldGhvZDsKLSAgICBQMSBtX3BhcmFtZXRlcjE7Ci0g
ICAgUDIgbV9wYXJhbWV0ZXIyOwotICAgIFAzIG1fcGFyYW1ldGVyMzsKLSAgICBQNCBtX3BhcmFt
ZXRlcjQ7Ci0gICAgUDUgbV9wYXJhbWV0ZXI1OwotICAgIFA2IG1fcGFyYW1ldGVyNjsKLSAgICBQ
NyBtX3BhcmFtZXRlcjc7Ci0gICAgUDggbV9wYXJhbWV0ZXI4OwogfTsKIAotdGVtcGxhdGU8dHlw
ZW5hbWUgUDEsIHR5cGVuYW1lIE1QMT4KLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgY3Jl
YXRlQ2FsbGJhY2tUYXNrKAotICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBNUDEpLAotICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxKQotewotICAgIGF1dG8gdGFza1B0
ciA9IG5ldyBDcm9zc1RocmVhZFRhc2sxPHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6
VHlwZSwgTVAxPigKLSAgICAgICAgbWV0aG9kLAotICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
MT46OmNvcHkocGFyYW1ldGVyMSkpOwotICAgIHJldHVybiBbPV0gKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHR5cGVuYW1lIHN0ZDo6
cmVtb3ZlX3BvaW50ZXI8ZGVjbHR5cGUodGFza1B0cik+Ojp0eXBlPiB0YXNrKHRhc2tQdHIpOwot
ICAgICAgICB0YXNrLT5wZXJmb3JtVGFzayhjb250ZXh0KTsKLSAgICB9OwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyPgot
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayBjcmVhdGVDYWxsYmFja1Rhc2soCi0gICAgdm9p
ZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyKSwKLSAgICBjb25z
dCBQMSYgcGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIpCi17Ci0gICAgYXV0byB0YXNr
UHRyID0gbmV3IENyb3NzVGhyZWFkVGFzazI8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+
OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyPigK
LSAgICAgICAgbWV0aG9kLAotICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFy
YW1ldGVyMSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSk7Ci0gICAg
cmV0dXJuIFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgewotICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxkZWNsdHlwZSh0YXNr
UHRyKT46OnR5cGU+IHRhc2sodGFza1B0cik7Ci0gICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKGNv
bnRleHQpOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEs
IHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDM+Ci1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIGNyZWF0ZUNhbGxiYWNrVGFzaygKLSAgICB2b2lk
ICgqbWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMyksCi0gICAg
Y29uc3QgUDEmIHBhcmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFy
YW1ldGVyMykKLXsKLSAgICBhdXRvIHRhc2tQdHIgPSBuZXcgQ3Jvc3NUaHJlYWRUYXNrMzx0eXBl
bmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6
VHlwZSwgTVAzPigKLSAgICAgICAgbWV0aG9kLAotICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
MT46OmNvcHkocGFyYW1ldGVyMSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0
ZXIyKSwKLSAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpKTsK
LSAgICByZXR1cm4gWz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSB7Ci0gICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPGRlY2x0eXBl
KHRhc2tQdHIpPjo6dHlwZT4gdGFzayh0YXNrUHRyKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRh
c2soY29udGV4dCk7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1l
IE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1Q
MywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QND4KLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2sgY3JlYXRlQ2FsbGJhY2tUYXNrKAotICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQpLAotICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIx
LCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29uc3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBw
YXJhbWV0ZXI0KQotewotICAgIGF1dG8gdGFza1B0ciA9IG5ldyBDcm9zc1RocmVhZFRhc2s0PHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1Ro
cmVhZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+
OjpUeXBlLCBNUDMsCi0gICAgICAgIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6VHlw
ZSwgTVA0PigKLSAgICAgICAgICAgIG1ldGhvZCwKLSAgICAgICAgICAgIENyb3NzVGhyZWFkQ29w
aWVyPFAxPjo6Y29weShwYXJhbWV0ZXIxKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBh
cmFtZXRlcjIpLAotICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFt
ZXRlcjMpLCBDcm9zc1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCkpOwotICAgIHJl
dHVybiBbPV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIHsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8ZGVjbHR5cGUodGFza1B0
cik+Ojp0eXBlPiB0YXNrKHRhc2tQdHIpOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzayhjb250
ZXh0KTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0
eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBl
bmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1PgotU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzayBjcmVhdGVDYWxsYmFja1Rhc2soCi0gICAgdm9pZCAoKm1l
dGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1KSwK
LSAgICBjb25zdCBQMSYgcGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAz
JiBwYXJhbWV0ZXIzLCBjb25zdCBQNCYgcGFyYW1ldGVyNCwgY29uc3QgUDUmIHBhcmFtZXRlcjUp
Ci17Ci0gICAgYXV0byB0YXNrUHRyID0gbmV3IENyb3NzVGhyZWFkVGFzazU8dHlwZW5hbWUgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1Q
MywKLSAgICAgICAgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1PigKLSAgICAgICAgICAgIG1l
dGhvZCwKLSAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJhbWV0ZXIx
KSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAotICAgICAgICAgICAg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLCBDcm9zc1RocmVhZENvcGll
cjxQND46OmNvcHkocGFyYW1ldGVyNCksCi0gICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQ
NT46OmNvcHkocGFyYW1ldGVyNSkpOwotICAgIHJldHVybiBbPV0gKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHR5cGVuYW1lIHN0ZDo6
cmVtb3ZlX3BvaW50ZXI8ZGVjbHR5cGUodGFza1B0cik+Ojp0eXBlPiB0YXNrKHRhc2tQdHIpOwot
ICAgICAgICB0YXNrLT5wZXJmb3JtVGFzayhjb250ZXh0KTsKLSAgICB9OwotfQotCi10ZW1wbGF0
ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0
eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBl
bmFtZSBQNSwgdHlwZW5hbWUgTVA1LCB0eXBlbmFtZSBQNiwgdHlwZW5hbWUgTVA2PgotU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzayBjcmVhdGVDYWxsYmFja1Rhc2soCi0gICAgdm9pZCAoKm1l
dGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1LCBN
UDYpLAotICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29u
c3QgUDMmIHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBjb25zdCBQNSYgcGFyYW1l
dGVyNSwgY29uc3QgUDYmIHBhcmFtZXRlcjYpCi17Ci0gICAgYXV0byB0YXNrUHRyID0gbmV3IENy
b3NzVGhyZWFkVGFzazY8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEs
IHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9z
c1RocmVhZENvcGllcjxQMz46OlR5cGUsIE1QMywKLSAgICAgICAgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6
VHlwZSwgTVA1LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNj46OlR5cGUsIE1QNj4oCi0g
ICAgICAgICAgICBtZXRob2QsCi0gICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNv
cHkocGFyYW1ldGVyMSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwK
LSAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwgQ3Jv
c3NUaHJlYWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAotICAgICAgICAgICAgQ3Jvc3NU
aHJlYWRDb3BpZXI8UDU+Ojpjb3B5KHBhcmFtZXRlcjUpLCBDcm9zc1RocmVhZENvcGllcjxQNj46
OmNvcHkocGFyYW1ldGVyNikpOwotICAgIHJldHVybiBbPV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHR5cGVuYW1lIHN0ZDo6cmVt
b3ZlX3BvaW50ZXI8ZGVjbHR5cGUodGFza1B0cik+Ojp0eXBlPiB0YXNrKHRhc2tQdHIpOwotICAg
ICAgICB0YXNrLT5wZXJmb3JtVGFzayhjb250ZXh0KTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0
eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBl
bmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFt
ZSBQNSwgdHlwZW5hbWUgTVA1LCB0eXBlbmFtZSBQNiwgdHlwZW5hbWUgTVA2LCB0eXBlbmFtZSBQ
NywgdHlwZW5hbWUgTVA3PgotU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayBjcmVhdGVDYWxs
YmFja1Rhc2soCi0gICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIE1Q
MSwgTVAyLCBNUDMsIE1QNCwgTVA1LCBNUDYsIE1QNyksCi0gICAgY29uc3QgUDEmIHBhcmFtZXRl
cjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFyYW1ldGVyMywgY29uc3QgUDQm
IHBhcmFtZXRlcjQsIGNvbnN0IFA1JiBwYXJhbWV0ZXI1LCBjb25zdCBQNiYgcGFyYW1ldGVyNiwg
Y29uc3QgUDcmIHBhcmFtZXRlcjcpCi17Ci0gICAgYXV0byB0YXNrUHRyID0gbmV3IENyb3NzVGhy
ZWFkVGFzazc8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMz46OlR5cGUsIE1QMywKLSAgICAgICAgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDQ+OjpUeXBlLCBNUDQsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwg
TVA1LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNj46OlR5cGUsIE1QNiwKLSAgICAgICAg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDc+OjpUeXBlLCBNUDc+KAotICAgICAgICAgICAg
bWV0aG9kLAotICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRl
cjEpLCBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCi0gICAgICAgICAg
ICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksIENyb3NzVGhyZWFkQ29w
aWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKLSAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVy
PFA1Pjo6Y29weShwYXJhbWV0ZXI1KSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDY+Ojpjb3B5KHBhcmFt
ZXRlcjYpLAotICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDc+Ojpjb3B5KHBhcmFtZXRl
cjcpKTsKLSAgICByZXR1cm4gWz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSB7
Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPGRl
Y2x0eXBlKHRhc2tQdHIpPjo6dHlwZT4gdGFzayh0YXNrUHRyKTsKLSAgICAgICAgdGFzay0+cGVy
Zm9ybVRhc2soY29udGV4dCk7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5
cGVuYW1lIE1QMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVu
YW1lIE1QMywgdHlwZW5hbWUgUDQsIHR5cGVuYW1lIE1QNCwgdHlwZW5hbWUgUDUsIHR5cGVuYW1l
IE1QNSwgdHlwZW5hbWUgUDYsIHR5cGVuYW1lIE1QNiwgdHlwZW5hbWUgUDcsIHR5cGVuYW1lIE1Q
NywgdHlwZW5hbWUgUDgsIHR5cGVuYW1lIE1QOD4KLVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRh
c2sgY3JlYXRlQ2FsbGJhY2tUYXNrKAotICAgIHZvaWQgKCptZXRob2QpKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSwgTVA2LCBNUDcsIE1QOCksCi0gICAg
Y29uc3QgUDEmIHBhcmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFy
YW1ldGVyMywgY29uc3QgUDQmIHBhcmFtZXRlcjQsIGNvbnN0IFA1JiBwYXJhbWV0ZXI1LCBjb25z
dCBQNiYgcGFyYW1ldGVyNiwgY29uc3QgUDcmIHBhcmFtZXRlcjcsIGNvbnN0IFA4JiBwYXJhbWV0
ZXI4KQotewotICAgIGF1dG8gdGFza1B0ciA9IG5ldyBDcm9zc1RocmVhZFRhc2s4PHR5cGVuYW1l
IENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVhZENv
cGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpUeXBl
LCBNUDMsCi0gICAgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBlLCBNUDQsIHR5
cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA1Pjo6VHlwZSwgTVA1LCB0eXBlbmFtZSBDcm9zc1Ro
cmVhZENvcGllcjxQNj46OlR5cGUsIE1QNiwKLSAgICB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGll
cjxQNz46OlR5cGUsIE1QNywgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDg+OjpUeXBlLCBN
UDg+KAotICAgICAgICBtZXRob2QsCi0gICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29w
eShwYXJhbWV0ZXIxKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAot
ICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksIENyb3NzVGhy
ZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKLSAgICAgICAgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDU+Ojpjb3B5KHBhcmFtZXRlcjUpLCBDcm9zc1RocmVhZENvcGllcjxQNj46OmNvcHkocGFy
YW1ldGVyNiksCi0gICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA3Pjo6Y29weShwYXJhbWV0ZXI3
KSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDg+Ojpjb3B5KHBhcmFtZXRlcjgpKTsKLSAgICByZXR1cm4g
Wz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSB7Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPGRlY2x0eXBlKHRhc2tQdHIpPjo6
dHlwZT4gdGFzayh0YXNrUHRyKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soY29udGV4dCk7
Ci0gICAgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gQ3Jvc3NU
aHJlYWRUYXNrX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAkocmV2
aXNpb24gMTY4NTk1KQorKysgU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTYwLDggKzE2MCw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6YWJvcnQo
KQogICAgIG1fYWJvcnRpbmcgPSB0cnVlOwogCiAgICAgLy8gU2NoZWR1bGUgdG8gaGF2ZSB0aGUg
YWJvcnQgZG9uZSBsYXRlciBzaW5jZSBhYm9ydCgpIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIHRoZSBl
dmVudCBoYW5kbGVyIGFuZCB3ZSBkbyBub3Qgd2FudCB0aGUgcmVzb3VyY2UgbG9hZGluZyBjb2Rl
IHRvIGJlIGluIHRoZSBzdGFjay4KLSAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RU
YXNrKAotICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJmRlbGF5ZWRBYm9ydCwgQWxsb3dBY2Nl
c3NMYXRlcih0aGlzKSkpOworICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2so
Q3Jvc3NUaHJlYWRUYXNrKCZkZWxheWVkQWJvcnQsIEFsbG93QWNjZXNzTGF0ZXIodGhpcykpKTsK
IH0KIAogdm9pZCBGaWxlUmVhZGVyOjpkb0Fib3J0KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHAJKHJldmlzaW9uIDE2ODU5NSkK
KysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTEsOSArOTEsNyBAQCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWlu
VGhyZWFkQnJpZGdlCiAgICAgLCBtX3Rhc2tNb2RlKHRhc2tNb2RlLmlzb2xhdGVkQ29weSgpKQog
ewogICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOwotICAgIG1fbG9hZGVy
UHJveHkucG9zdFRhc2tUb0xvYWRlcigKLSAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZNYWlu
VGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVyLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHJlcXVlc3QsIG9wdGlvbnMs
IG91dGdvaW5nUmVmZXJyZXIpKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIo
Q3Jvc3NUaHJlYWRUYXNrKCZNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ3JlYXRlTG9hZGVy
LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpLCByZXF1ZXN0LCBvcHRpb25zLCBvdXRnb2lu
Z1JlZmVycmVyKSk7CiB9CiAKIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlk
Z2U6On5NYWluVGhyZWFkQnJpZGdlKCkKQEAgLTEyNyw4ICsxMjUsNyBAQCB2b2lkIFdvcmtlclRo
cmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCCiAgICAgY2xlYXJDbGllbnRXcmFwcGVyKCk7CiAK
ICAgICAvLyAiZGVsZXRlIHRoaXMiIGFuZCBtX21haW5UaHJlYWRMb2FkZXI6OmRlcmVmKCkgb24g
dGhlIHdvcmtlciBvYmplY3QncyB0aHJlYWQuCi0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1Rv
TG9hZGVyKAotICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1h
aW5UaHJlYWREZXN0cm95LCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CisgICAgbV9s
b2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKENyb3NzVGhyZWFkVGFzaygmTWFpblRocmVhZEJy
aWRnZTo6bWFpblRocmVhZERlc3Ryb3ksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsK
IH0KIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjptYWlu
VGhyZWFkQ2FuY2VsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRC
cmlkZ2UqIHRoaXNQdHIpCkBAIC0xNDQsOCArMTQxLDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxl
TG9hZGVyOjpNYWluVGhyZWFkQgogCiB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5U
aHJlYWRCcmlkZ2U6OmNhbmNlbCgpCiB7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9h
ZGVyKAotICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1haW5U
aHJlYWRDYW5jZWwsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKKyAgICBtX2xvYWRl
clByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NUaHJlYWRUYXNrKCZNYWluVGhyZWFkQnJpZGdl
OjptYWluVGhyZWFkQ2FuY2VsLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHRoaXMpKSk7CiAgICAg
VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNs
aWVudFdyYXBwZXIuZ2V0KCk7CiAgICAgaWYgKCFjbGllbnRXcmFwcGVyLT5kb25lKCkpIHsKICAg
ICAgICAgLy8gSWYgdGhlIGNsaWVudCBoYXNuJ3QgcmVhY2hlZCBhIHRlcm1pbmF0aW9uIHN0YXRl
LCB0aGVuIHRyYW5zaXRpb24gaXQgYnkgc2VuZGluZyBhIGNhbmNlbGxhdGlvbiBlcnJvci4KQEAg
LTE3MCw3ICsxNjYsNyBAQCBzdGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURpZFNlbmREYXRh
CiAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkU2Vu
ZERhdGEodW5zaWduZWQgbG9uZyBsb25nIGJ5dGVzU2VudCwgdW5zaWduZWQgbG9uZyBsb25nIHRv
dGFsQnl0ZXNUb0JlU2VudCkKIHsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRv
V29ya2VyR2xvYmFsU2NvcGUoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURp
ZFNlbmREYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1Rv
QmVTZW50KSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVU
b1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhyZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRT
ZW5kRGF0YSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBieXRlc1NlbnQsIHRvdGFsQnl0ZXNUb0Jl
U2VudCksIG1fdGFza01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURp
ZFJlY2VpdmVSZXNwb25zZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8
VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgUGFzc093blB0cjxDcm9zc1RocmVhZFJlc291cmNlUmVzcG9u
c2VEYXRhPiByZXNwb25zZURhdGEpCkBAIC0xODIsNyArMTc4LDcgQEAgc3RhdGljIHZvaWQgd29y
a2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlUgogCiB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6
Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVSZXNwb25zZSh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewotICAgIG1fbG9hZGVy
UHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShjcmVhdGVDYWxsYmFja1Rh
c2soJndvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZVJlc3BvbnNlLCBtX3dvcmtlckNsaWVudFdy
YXBwZXIsIGlkZW50aWZpZXIsIHJlc3BvbnNlKSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQ
cm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhyZWFkVGFzaygm
d29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlUmVzcG9uc2UsIG1fd29ya2VyQ2xpZW50V3JhcHBl
ciwgaWRlbnRpZmllciwgcmVzcG9uc2UpLCBtX3Rhc2tNb2RlKTsKIH0KIAogc3RhdGljIHZvaWQg
d29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlRGF0YShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVu
dFdyYXBwZXIsIFBhc3NPd25QdHI8VmVjdG9yPGNoYXI+PiB2ZWN0b3JEYXRhKQpAQCAtMTkzLDkg
KzE4OSw5IEBAIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZUQKIAogdm9p
ZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgZGF0YUxlbmd0aCkKIHsKLSAgICBPd25QdHI8VmVjdG9y
PGNoYXI+PiB2ZWN0b3IgPSBhZG9wdFB0cihuZXcgVmVjdG9yPGNoYXI+KGRhdGFMZW5ndGgpKTsg
Ly8gbmVlZHMgdG8gYmUgYW4gT3duUHRyIGZvciB1c2FnZSB3aXRoIGNyZWF0ZUNhbGxiYWNrVGFz
ay4KKyAgICBPd25QdHI8VmVjdG9yPGNoYXI+PiB2ZWN0b3IgPSBhZG9wdFB0cihuZXcgVmVjdG9y
PGNoYXI+KGRhdGFMZW5ndGgpKTsgLy8gbmVlZHMgdG8gYmUgYW4gT3duUHRyIGZvciB1c2FnZSB3
aXRoIENyb3NzVGhyZWFkVGFzay4KICAgICBtZW1jcHkodmVjdG9yLT5kYXRhKCksIGRhdGEsIGRh
dGFMZW5ndGgpOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9i
YWxTY29wZShjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZURh
dGEsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgdmVjdG9yLnJlbGVhc2UoKSksIG1fdGFza01vZGUp
OworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShD
cm9zc1RocmVhZFRhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZURhdGEsIG1fd29ya2Vy
Q2xpZW50V3JhcHBlciwgdmVjdG9yLnJlbGVhc2UoKSksIG1fdGFza01vZGUpOwogfQogCiBzdGF0
aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURpZEZpbmlzaExvYWRpbmcoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGRvdWJsZSBmaW5p
c2hUaW1lKQpAQCAtMjA2LDcgKzIwMiw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3Bl
RGlkRmluaXNoTG8KIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJp
ZGdlOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZp
bmlzaFRpbWUpCiB7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckds
b2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRGaW5pc2hM
b2FkaW5nLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGlkZW50aWZpZXIsIGZpbmlzaFRpbWUpLCBt
X3Rhc2tNb2RlKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xv
YmFsU2NvcGUoQ3Jvc3NUaHJlYWRUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZEZpbmlzaExvYWRp
bmcsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgaWRlbnRpZmllciwgZmluaXNoVGltZSksIG1fdGFz
a01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURpZEZhaWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRX
cmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
QEAgLTIxNyw3ICsyMTMsNyBAQCBzdGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURpZEZhaWwo
U2NyCiAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlk
RmFpbChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBtX2xvYWRlclByb3h5LnBv
c3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3Jr
ZXJHbG9iYWxTY29wZURpZEZhaWwsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgZXJyb3IpLCBtX3Rh
c2tNb2RlKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFs
U2NvcGUoQ3Jvc3NUaHJlYWRUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZEZhaWwsIG1fd29ya2Vy
Q2xpZW50V3JhcHBlciwgZXJyb3IpLCBtX3Rhc2tNb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgd29y
a2VyR2xvYmFsU2NvcGVEaWRGYWlsQWNjZXNzQ29udHJvbENoZWNrKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+
IHdvcmtlckNsaWVudFdyYXBwZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpAQCAtMjI4
LDcgKzIyNCw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkRmFpbEFjY2UKIAog
dm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRGYWlsQWNj
ZXNzQ29udHJvbENoZWNrKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIG1fbG9h
ZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShjcmVhdGVDYWxsYmFj
a1Rhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkRmFpbEFjY2Vzc0NvbnRyb2xDaGVjaywgbV93b3Jr
ZXJDbGllbnRXcmFwcGVyLCBlcnJvciksIG1fdGFza01vZGUpOworICAgIG1fbG9hZGVyUHJveHku
cG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShDcm9zc1RocmVhZFRhc2soJndvcmtl
ckdsb2JhbFNjb3BlRGlkRmFpbEFjY2Vzc0NvbnRyb2xDaGVjaywgbV93b3JrZXJDbGllbnRXcmFw
cGVyLCBlcnJvciksIG1fdGFza01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxT
Y29wZURpZEZhaWxSZWRpcmVjdENoZWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBl
cikKQEAgLTIzOSw3ICsyMzUsNyBAQCBzdGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURpZEZh
aWxSZWRpCiAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6
ZGlkRmFpbFJlZGlyZWN0Q2hlY2soKQogewotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JN
b2RlVG9Xb3JrZXJHbG9iYWxTY29wZShjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckdsb2JhbFNj
b3BlRGlkRmFpbFJlZGlyZWN0Q2hlY2ssIG1fd29ya2VyQ2xpZW50V3JhcHBlciksIG1fdGFza01v
ZGUpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29w
ZShDcm9zc1RocmVhZFRhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkRmFpbFJlZGlyZWN0Q2hlY2ss
IG1fd29ya2VyQ2xpZW50V3JhcHBlciksIG1fdGFza01vZGUpOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxv
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRh
YmxlTG9hZGVyLmgJKHJldmlzaW9uIDE2ODU5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9X
b3JrZXJUaHJlYWRhYmxlTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkxLDcgKzkxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyAgICBUaGUgVGhyZWFkYWJsZUxvYWRlckNs
aWVudFdyYXBwZXIgaGFzIHRoZSB1bmRlcmx5aW5nIGNsaWVudCBjbGVhcmVkLCBzbyBubyBtb3Jl
IGNhbGxzCiAgICAgICAgIC8vICAgIGdvIHRocm91Z2ggaXQuICBBbGwgdGFza3MgcG9zdGVkIGZy
b20gdGhlIHdvcmtlciBvYmplY3QncyB0aHJlYWQgdG8gdGhlIHdvcmtlciBjb250ZXh0J3MKICAg
ICAgICAgLy8gICAgdGhyZWFkIGRvICJUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcjo6cmVm
IiAoYXV0b21hdGljYWxseSBpbnNpZGUgb2YgdGhlIGNyb3NzIHRocmVhZCBjb3B5Ci0gICAgICAg
IC8vICAgIGRvbmUgaW4gY3JlYXRlQ2FsbGJhY2tUYXNrKSwgc28gdGhlIFRocmVhZGFibGVMb2Fk
ZXJDbGllbnRXcmFwcGVyIGluc3RhbmNlIGlzIHRoZXJlIHVudGlsIGFsbAorICAgICAgICAvLyAg
ICBkb25lIGluIENyb3NzVGhyZWFkVGFzayksIHNvIHRoZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50
V3JhcHBlciBpbnN0YW5jZSBpcyB0aGVyZSB1bnRpbCBhbGwKICAgICAgICAgLy8gICAgdGFza3Mg
YXJlIGV4ZWN1dGVkLgogICAgICAgICBjbGFzcyBNYWluVGhyZWFkQnJpZGdlIDogcHVibGljIFRo
cmVhZGFibGVMb2FkZXJDbGllbnQgewogICAgICAgICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAJKHJldmlzaW9uIDE2ODU5NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg0Nyw3ICs4NDcsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVVcmxGcm9tQ2Fj
aGUoU2NyCiB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbUNhY2hlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwg
U2Vzc2lvbklEIHNlc3Npb25JRCkKIHsKICAgICBpZiAoY29udGV4dC0+aXNXb3JrZXJHbG9iYWxT
Y29wZSgpKSB7Ci0gICAgICAgIHRvV29ya2VyR2xvYmFsU2NvcGUoY29udGV4dCktPnRocmVhZCgp
LndvcmtlckxvYWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2so
JmNyb3NzVGhyZWFkUmVtb3ZlUmVxdWVzdEZyb21DYWNoZSwgcmVxdWVzdCwgc2Vzc2lvbklEKSk7
CisgICAgICAgIHRvV29ya2VyR2xvYmFsU2NvcGUoY29udGV4dCktPnRocmVhZCgpLndvcmtlckxv
YWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRhc2soJmNyb3NzVGhyZWFk
UmVtb3ZlUmVxdWVzdEZyb21DYWNoZSwgcmVxdWVzdCwgc2Vzc2lvbklEKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKQEAgLTg2Myw3ICs4NjMsNyBAQCB2b2lkIE1lbW9yeUNhY2hlOjpyZW1v
dmVSZXF1ZXN0RnJvbUNhY2hlCiB2b2lkIE1lbW9yeUNhY2hlOjpyZW1vdmVSZXF1ZXN0RnJvbVNl
c3Npb25DYWNoZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckdsb2JhbFNj
b3BlKCkpIHsKLSAgICAgICAgdG9Xb3JrZXJHbG9iYWxTY29wZShjb250ZXh0KS0+dGhyZWFkKCku
d29ya2VyTG9hZGVyUHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygm
Y3Jvc3NUaHJlYWRSZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMsIHJlcXVlc3QpKTsKKyAg
ICAgICAgdG9Xb3JrZXJHbG9iYWxTY29wZShjb250ZXh0KS0+dGhyZWFkKCkud29ya2VyTG9hZGVy
UHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKENyb3NzVGhyZWFkVGFzaygmY3Jvc3NUaHJlYWRSZW1v
dmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXMsIHJlcXVlc3QpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICByZW1vdmVSZXF1ZXN0RnJvbVNlc3Npb25DYWNoZXNJbXBsKGNvbnRleHQsIHJl
cXVlc3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2Vy
UmVwb3NpdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9EZWZh
dWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAJKHJldmlzaW9uIDE2ODU5NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3dvcmtlcnMvRGVmYXVsdFNoYXJlZFdvcmtlclJlcG9zaXRvcnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODYsOCArMTg2LDggQEAgc3RhdGljIHZvaWQgcG9zdEV4Y2VwdGlvblRh
c2soU2NyaXB0RXhlYwogdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdEV4Y2VwdGlvblRvV29y
a2VyT2JqZWN0KGNvbnN0IFN0cmluZyYgZXJyb3JNZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50
IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7CiAgICAgTXV0ZXhMb2Nr
ZXIgbG9jayhtX3dvcmtlckRvY3VtZW50c0xvY2spOwotICAgIGZvciAoSGFzaFNldDxEb2N1bWVu
dCo+OjppdGVyYXRvciBpdGVyID0gbV93b3JrZXJEb2N1bWVudHMuYmVnaW4oKTsgaXRlciAhPSBt
X3dvcmtlckRvY3VtZW50cy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5wb3N0VGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJnBvc3RFeGNlcHRpb25UYXNrLCBlcnJvck1lc3NhZ2UsIGxp
bmVOdW1iZXIsIGNvbHVtbk51bWJlciwgc291cmNlVVJMKSk7CisgICAgZm9yIChhdXRvJiBkb2N1
bWVudCA6IG1fd29ya2VyRG9jdW1lbnRzKQorICAgICAgICBkb2N1bWVudC0+cG9zdFRhc2soQ3Jv
c3NUaHJlYWRUYXNrKCZwb3N0RXhjZXB0aW9uVGFzaywgZXJyb3JNZXNzYWdlLCBsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXIsIHNvdXJjZVVSTCkpOwogfQogCiBzdGF0aWMgdm9pZCBwb3N0Q29uc29s
ZU1lc3NhZ2VUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGRvY3VtZW50LCBNZXNzYWdlU291
cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIGNv
bnN0IFN0cmluZyYgc291cmNlVVJMLCB1bnNpZ25lZCBsaW5lTnVtYmVyLCB1bnNpZ25lZCBjb2x1
bW5OdW1iZXIpCkBAIC0xOTgsOCArMTk4LDggQEAgc3RhdGljIHZvaWQgcG9zdENvbnNvbGVNZXNz
YWdlVGFzayhTY3JpcAogdm9pZCBTaGFyZWRXb3JrZXJQcm94eTo6cG9zdENvbnNvbGVNZXNzYWdl
VG9Xb3JrZXJPYmplY3QoTWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwg
Y29uc3QgU3RyaW5nJiBzb3VyY2VVUkwpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9jayhtX3dvcmtl
ckRvY3VtZW50c0xvY2spOwotICAgIGZvciAoSGFzaFNldDxEb2N1bWVudCo+OjppdGVyYXRvciBp
dGVyID0gbV93b3JrZXJEb2N1bWVudHMuYmVnaW4oKTsgaXRlciAhPSBtX3dvcmtlckRvY3VtZW50
cy5lbmQoKTsgKytpdGVyKQotICAgICAgICAoKml0ZXIpLT5wb3N0VGFzayhjcmVhdGVDYWxsYmFj
a1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIHNv
dXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKSk7CisgICAgZm9yIChhdXRvJiBkb2N1
bWVudCA6IG1fd29ya2VyRG9jdW1lbnRzKQorICAgICAgICBkb2N1bWVudC0+cG9zdFRhc2soQ3Jv
c3NUaHJlYWRUYXNrKCZwb3N0Q29uc29sZU1lc3NhZ2VUYXNrLCBzb3VyY2UsIGxldmVsLCBtZXNz
YWdlLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikpOwogfQogCiAjaWYgRU5B
QkxFKElOU1BFQ1RPUikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyTWVzc2Fn
aW5nUHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dvcmtlcnMvV29ya2Vy
TWVzc2FnaW5nUHJveHkuY3BwCShyZXZpc2lvbiAxNjg1OTUpCisrKyBTb3VyY2UvV2ViQ29yZS93
b3JrZXJzL1dvcmtlck1lc3NhZ2luZ1Byb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcg
KzE3Miw3IEBAIHN0YXRpYyB2b2lkIHBvc3RDb25zb2xlTWVzc2FnZVRhc2soU2NyaXAKIAogdm9p
ZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3Qo
TWVzc2FnZVNvdXJjZSBzb3VyY2UsIE1lc3NhZ2VMZXZlbCBsZXZlbCwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlLCBpbnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBz
b3VyY2VVUkwpCiB7Ci0gICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFzayhjcmVh
dGVDYWxsYmFja1Rhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJlYWRB
Y2Nlc3ModGhpcyksIHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVtbk51
bWJlciwgc291cmNlVVJMKSk7CisgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5wb3N0VGFz
ayhDcm9zc1RocmVhZFRhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIEFsbG93Q3Jvc3NUaHJl
YWRBY2Nlc3ModGhpcyksIHNvdXJjZSwgbGV2ZWwsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIGNvbHVt
bk51bWJlciwgc291cmNlVVJMKSk7CiB9CiAKIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondv
cmtlclRocmVhZENyZWF0ZWQoUGFzc1JlZlB0cjxEZWRpY2F0ZWRXb3JrZXJUaHJlYWQ+IHdvcmtl
clRocmVhZCkKQEAgLTE5Niw3ICsxOTYsNyBAQCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3
b3JrZXJUaHJlYWRDCiB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojp3b3JrZXJPYmplY3REZXN0
cm95ZWQoKQogewogICAgIG1fd29ya2VyT2JqZWN0ID0gMDsKLSAgICBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyT2JqZWN0RGVzdHJv
eWVkSW50ZXJuYWwsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKKyAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKENyb3NzVGhyZWFkVGFzaygmd29ya2VyT2JqZWN0
RGVzdHJveWVkSW50ZXJuYWwsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKIH0KIAog
dm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6bm90aWZ5TmV0d29ya1N0YXRlQ2hhbmdlKGJvb2wg
aXNPbmxpbmUpCkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6
Y29ubmVjdFRvSW5zcAogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX3BhZ2VJbnNwZWN0
b3IpOwogICAgIG1fcGFnZUluc3BlY3RvciA9IHBhZ2VJbnNwZWN0b3I7Ci0gICAgbV93b3JrZXJU
aHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUoY3JlYXRlQ2FsbGJhY2tUYXNrKGNvbm5l
Y3RUb1dvcmtlckdsb2JhbFNjb3BlSW5zcGVjdG9yVGFzaywgdHJ1ZSksIFdvcmtlckRlYnVnZ2Vy
QWdlbnQ6OmRlYnVnZ2VyVGFza01vZGUpOworICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCku
cG9zdFRhc2tGb3JNb2RlKENyb3NzVGhyZWFkVGFzayhjb25uZWN0VG9Xb3JrZXJHbG9iYWxTY29w
ZUluc3BlY3RvclRhc2ssIHRydWUpLCBXb3JrZXJEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlclRhc2tN
b2RlKTsKIH0KIAogc3RhdGljIHZvaWQgZGlzY29ubmVjdEZyb21Xb3JrZXJHbG9iYWxTY29wZUlu
c3BlY3RvclRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgYm9vbCkKQEAgLTI0
Nyw3ICsyNDcsNyBAQCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpkaXNjb25uZWN0RnJvCiAg
ICAgbV9wYWdlSW5zcGVjdG9yID0gMDsKICAgICBpZiAobV9hc2tlZFRvVGVybWluYXRlKQogICAg
ICAgICByZXR1cm47Ci0gICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1v
ZGUoY3JlYXRlQ2FsbGJhY2tUYXNrKGRpc2Nvbm5lY3RGcm9tV29ya2VyR2xvYmFsU2NvcGVJbnNw
ZWN0b3JUYXNrLCB0cnVlKSwgV29ya2VyRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJUYXNrTW9kZSk7
CisgICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5wb3N0VGFza0Zvck1vZGUoQ3Jvc3NUaHJl
YWRUYXNrKGRpc2Nvbm5lY3RGcm9tV29ya2VyR2xvYmFsU2NvcGVJbnNwZWN0b3JUYXNrLCB0cnVl
KSwgV29ya2VyRGVidWdnZXJBZ2VudDo6ZGVidWdnZXJUYXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2
b2lkIGRpc3BhdGNoT25JbnNwZWN0b3JCYWNrZW5kVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0yNTksNyArMjU5LDcgQEAgdm9p
ZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6c2VuZE1lc3NhZ2VUbwogewogICAgIGlmIChtX2Fza2Vk
VG9UZXJtaW5hdGUpCiAgICAgICAgIHJldHVybjsKLSAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9v
cCgpLnBvc3RUYXNrRm9yTW9kZShjcmVhdGVDYWxsYmFja1Rhc2soZGlzcGF0Y2hPbkluc3BlY3Rv
ckJhY2tlbmRUYXNrLCBTdHJpbmcobWVzc2FnZSkpLCBXb3JrZXJEZWJ1Z2dlckFnZW50OjpkZWJ1
Z2dlclRhc2tNb2RlKTsKKyAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9y
TW9kZShDcm9zc1RocmVhZFRhc2soZGlzcGF0Y2hPbkluc3BlY3RvckJhY2tlbmRUYXNrLCBTdHJp
bmcobWVzc2FnZSkpLCBXb3JrZXJEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlclRhc2tNb2RlKTsKICAg
ICBXb3JrZXJEZWJ1Z2dlckFnZW50OjppbnRlcnJ1cHRBbmREaXNwYXRjaEluc3BlY3RvckNvbW1h
bmRzKG1fd29ya2VyVGhyZWFkLmdldCgpKTsKIH0KICNlbmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>231284</attachid>
            <date>2014-05-12 03:32:17 -0700</date>
            <delta_ts>2014-05-12 13:17:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-132800-20140512033153.patch</filename>
            <type>text/plain</type>
            <size>59830</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2ODYxNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkzIEBACisyMDE0LTA1LTEyICBaYW4gRG9i
ZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KKworICAgICAgICBDbGVhbiB1cCBDcm9zc1Ro
cmVhZFRhc2sKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEzMjgwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFJlbW92ZSB0aGUgY3JlYXRlQ2FsbGJhY2tUYXNrIG92ZXJsb2FkcyBhbmQgdGhlIHJlbGF0ZWQg
Q3Jvc3NUaHJlYWRUYXNrIGhlbHBlciBjbGFzc2VzLgorCisgICAgICAgIEluc3RlYWQsIGhhdmUg
b25lIHNpbXBsZSBDcm9zc1RocmVhZFRhc2sgY2xhc3MgdGhhdCBkZXJpdmVzIGZyb20gU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6VGFzay4KKyAgICAgICAgSXRzIHRlbXBsYXRlZCBjb25zdHJ1Y3Rv
ciB0YWtlcyBpbiB0aGUgbWV0aG9kIGFuZCB0aGUgdmFyaWFkaWMgcGFjayBvZiBwYXJhbWV0ZXJz
LiBUaGUgY3Jvc3MtdGhyZWFkCisgICAgICAgIGNvcGllcyBvZiB0aGUgcGFyYW1ldGVycyBhcmUg
dGhlbiBib3VuZCB0byB0aGF0IG1ldGhvZCBhbmQgdGhlIHJlc3VsdGluZyBiaW5kIGV4cHJlc3Np
b24gaXMgdXNlZCB0bworICAgICAgICBpbml0aWFsaXplIHRoZSBiYXNlIGNsYXNzLiBUaGUgYmlu
ZCBleHByZXNzaW9uIGlzIGNvbnN0cnVjdGVkIHdpdGggYSBwbGFjZWhvbGRlciBmb3IgdGhlCisg
ICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHBhcmFtZXRlciB0aGF0J3MgcHJvdmlkZWQg
dGhyb3VnaCBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrOjpwZXJmb3JtVGFzaygpLgorCisg
ICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50V3JhcHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXI6OmRpZENvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRSZWNlaXZlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6
OmRpZFJlY2VpdmVCaW5hcnlEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQpOgorICAg
ICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpk
aWRTdGFydENsb3NpbmdIYW5kc2hha2UpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRDbG9zZSk6CisgICAgICAgIChXZWJDb3Jl
OjpUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZFJlY2VpdmVNZXNz
YWdlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyOjpwcm9jZXNzUGVuZGluZ1Rhc2tzKToKKyAgICAgICAgKiBNb2R1bGVzL3dl
YnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnNlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6
OmJ1ZmZlcmVkQW1vdW50KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpQZWVyOjpkaWRDb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRSZWNlaXZlTWVzc2FnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6
ZGlkUmVjZWl2ZUJpbmFyeURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRT
dGFydENsb3NpbmdIYW5kc2hha2UpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZENsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpkaWRSZWNlaXZlTWVzc2FnZUVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpCcmlkZ2U6Om1haW5UaHJlYWRJbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6Oldvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmluaXRpYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6Y29u
bmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6QnJpZGdlOjpzZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpCcmlkZ2U6OmJ1ZmZlcmVkQW1vdW50KToKKyAgICAgICAgKFdlYkNvcmU6
OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmZh
aWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6
OkJyaWRnZTo6ZGlzY29ubmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6Oldv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OnJlc3VtZSk6CisgICAgICAg
ICogZG9tL0Nyb3NzVGhyZWFkVGFzay5oOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJlYWRU
YXNrOjpDcm9zc1RocmVhZFRhc2spOgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNr
MTo6Q3Jvc3NUaHJlYWRUYXNrMSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcm9zc1Ro
cmVhZFRhc2sxOjpwZXJmb3JtVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcm9z
c1RocmVhZFRhc2syOjpDcm9zc1RocmVhZFRhc2syKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkNyb3NzVGhyZWFkVGFzazI6OnBlcmZvcm1UYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNyb3NzVGhyZWFkVGFzazM6OkNyb3NzVGhyZWFkVGFzazMpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrMzo6cGVyZm9ybVRhc2spOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJlYWRUYXNrNDo6Q3Jvc3NUaHJlYWRUYXNrNCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcm9zc1RocmVhZFRhc2s0OjpwZXJmb3JtVGFzayk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDcm9zc1RocmVhZFRhc2s1OjpDcm9zc1RocmVh
ZFRhc2s1KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzazU6OnBl
cmZvcm1UYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzazY6
OkNyb3NzVGhyZWFkVGFzazYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NUaHJl
YWRUYXNrNjo6cGVyZm9ybVRhc2spOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q3Jvc3NU
aHJlYWRUYXNrNzo6Q3Jvc3NUaHJlYWRUYXNrNyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDcm9zc1RocmVhZFRhc2s3OjpwZXJmb3JtVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDcm9zc1RocmVhZFRhc2s4OjpDcm9zc1RocmVhZFRhc2s4KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNyb3NzVGhyZWFkVGFzazg6OnBlcmZvcm1UYXNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OmNyZWF0ZUNhbGxiYWNrVGFzayk6IERlbGV0ZWQuCisgICAgICAgICog
ZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmFi
b3J0KToKKyAgICAgICAgKiBsb2FkZXIvV29ya2VyVGhyZWFkYWJsZUxvYWRlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpN
YWluVGhyZWFkQnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6Y2FuY2VsKToKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFNlbmRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJl
YWRCcmlkZ2U6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJU
aHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRSZWNlaXZlRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpk
aWRGaW5pc2hMb2FkaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclRocmVhZGFibGVMb2Fk
ZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZhaWwpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
VGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRnZTo6ZGlkRmFpbEFjY2Vzc0NvbnRyb2xD
aGVjayk6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhy
ZWFkQnJpZGdlOjpkaWRGYWlsUmVkaXJlY3RDaGVjayk6CisgICAgICAgICogbG9hZGVyL1dvcmtl
clRocmVhZGFibGVMb2FkZXIuaDoKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvTWVtb3J5Q2FjaGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tU2Vz
c2lvbkNhY2hlcyk6CisgICAgICAgICogd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3Np
dG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRXb3JrZXJQcm94eTo6cG9zdEV4Y2Vw
dGlvblRvV29ya2VyT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZFdvcmtlclByb3h5
Ojpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdCk6CisgICAgICAgICogd29ya2Vycy9X
b3JrZXJNZXNzYWdpbmdQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdp
bmdQcm94eTo6cG9zdENvbnNvbGVNZXNzYWdlVG9Xb3JrZXJPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6V29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtlck9iamVjdERlc3Ryb3llZCk6CisgICAg
ICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6Y29ubmVjdFRvSW5zcGVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6Oldvcmtlck1lc3NhZ2luZ1Byb3h5OjpkaXNjb25uZWN0RnJvbUlu
c3BlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJNZXNzYWdpbmdQcm94eTo6c2VuZE1l
c3NhZ2VUb0luc3BlY3Rvcik6CisKIDIwMTQtMDUtMTIgIFphbiBEb2JlcnNlayAgPHpkb2JlcnNl
a0BpZ2FsaWEuY29tPgogCiAgICAgICAgIENsZWFuIHVwIE1haW5UaHJlYWRUYXNrCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWxDbGllbnRXcmFwcGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmNwcAko
cmV2aXNpb24gMTY4NjE2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1Ro
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDYgQEAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAjaW5jbHVkZSAiVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgiCiAKLSNpbmNsdWRlICJDcm9z
c1RocmVhZENvcGllci5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50LmgiCkBAIC0xNTcsNDkgKzE1Niw0OSBAQCB2b2lkIFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsQ2xpZW50V3JhCiAKIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyOjpkaWRDb25uZWN0KCkKIHsKLSAgICBtX3BlbmRpbmdUYXNrcy5hcHBlbmQoc3RkOjptYWtl
X3VuaXF1ZTxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPihjcmVhdGVDYWxsYmFja1Rhc2so
JmRpZENvbm5lY3RDYWxsYmFjaywgdGhpcykpKTsKKyAgICBtX3BlbmRpbmdUYXNrcy5hcHBlbmQo
c3RkOjptYWtlX3VuaXF1ZTxDcm9zc1RocmVhZFRhc2s+KCZkaWRDb25uZWN0Q2FsbGJhY2ssIHRo
aXMpKTsKICAgICBpZiAoIW1fc3VzcGVuZGVkKQogICAgICAgICBwcm9jZXNzUGVuZGluZ1Rhc2tz
KCk7CiB9CiAKIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpk
aWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgbV9wZW5kaW5n
VGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4oY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRSZWNlaXZlTWVzc2FnZUNhbGxiYWNrLCB0aGlzLCBt
ZXNzYWdlKSkpOworICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPENy
b3NzVGhyZWFkVGFzaz4oJmRpZFJlY2VpdmVNZXNzYWdlQ2FsbGJhY2ssIHRoaXMsIG1lc3NhZ2Up
KTsKICAgICBpZiAoIW1fc3VzcGVuZGVkKQogICAgICAgICBwcm9jZXNzUGVuZGluZ1Rhc2tzKCk7
CiB9CiAKIHZvaWQgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyOjpkaWRS
ZWNlaXZlQmluYXJ5RGF0YShQYXNzT3duUHRyPFZlY3RvcjxjaGFyPj4gYmluYXJ5RGF0YSkKIHsK
LSAgICBtX3BlbmRpbmdUYXNrcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxTY3JpcHRFeGVjdXRp
b25Db250ZXh0OjpUYXNrPihjcmVhdGVDYWxsYmFja1Rhc2soJmRpZFJlY2VpdmVCaW5hcnlEYXRh
Q2FsbGJhY2ssIHRoaXMsIGJpbmFyeURhdGEpKSk7CisgICAgbV9wZW5kaW5nVGFza3MuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8Q3Jvc3NUaHJlYWRUYXNrPigmZGlkUmVjZWl2ZUJpbmFyeURhdGFD
YWxsYmFjaywgdGhpcywgYmluYXJ5RGF0YSkpOwogICAgIGlmICghbV9zdXNwZW5kZWQpCiAgICAg
ICAgIHByb2Nlc3NQZW5kaW5nVGFza3MoKTsKIH0KIAogdm9pZCBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50KHVuc2lnbmVkIGxv
bmcgYnVmZmVyZWRBbW91bnQpCiB7Ci0gICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFr
ZV91bmlxdWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4oY3JlYXRlQ2FsbGJhY2tUYXNr
KCZkaWRVcGRhdGVCdWZmZXJlZEFtb3VudENhbGxiYWNrLCB0aGlzLCBidWZmZXJlZEFtb3VudCkp
KTsKKyAgICBtX3BlbmRpbmdUYXNrcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxDcm9zc1RocmVh
ZFRhc2s+KCZkaWRVcGRhdGVCdWZmZXJlZEFtb3VudENhbGxiYWNrLCB0aGlzLCBidWZmZXJlZEFt
b3VudCkpOwogICAgIGlmICghbV9zdXNwZW5kZWQpCiAgICAgICAgIHByb2Nlc3NQZW5kaW5nVGFz
a3MoKTsKIH0KIAogdm9pZCBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6
OmRpZFN0YXJ0Q2xvc2luZ0hhbmRzaGFrZSgpCiB7Ci0gICAgbV9wZW5kaW5nVGFza3MuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4oY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZkaWRTdGFydENsb3NpbmdIYW5kc2hha2VDYWxsYmFjaywgdGhpcykpKTsKKyAg
ICBtX3BlbmRpbmdUYXNrcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxDcm9zc1RocmVhZFRhc2s+
KCZkaWRTdGFydENsb3NpbmdIYW5kc2hha2VDYWxsYmFjaywgdGhpcykpOwogICAgIGlmICghbV9z
dXNwZW5kZWQpCiAgICAgICAgIHByb2Nlc3NQZW5kaW5nVGFza3MoKTsKIH0KIAogdm9pZCBUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6OmRpZENsb3NlKHVuc2lnbmVkIGxv
bmcgdW5oYW5kbGVkQnVmZmVyZWRBbW91bnQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQ6OkNsb3Np
bmdIYW5kc2hha2VDb21wbGV0aW9uU3RhdHVzIGNsb3NpbmdIYW5kc2hha2VDb21wbGV0aW9uLCB1
bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvbikKIHsKLSAgICBtX3BlbmRp
bmdUYXNrcy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPihjcmVhdGVDYWxsYmFja1Rhc2soJmRpZENsb3NlQ2FsbGJhY2ssIHRoaXMsIHVuaGFuZGxl
ZEJ1ZmZlcmVkQW1vdW50LCBjbG9zaW5nSGFuZHNoYWtlQ29tcGxldGlvbiwgY29kZSwgcmVhc29u
KSkpOworICAgIG1fcGVuZGluZ1Rhc2tzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPENyb3NzVGhy
ZWFkVGFzaz4oJmRpZENsb3NlQ2FsbGJhY2ssIHRoaXMsIHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50
LCBjbG9zaW5nSGFuZHNoYWtlQ29tcGxldGlvbiwgY29kZSwgcmVhc29uKSk7CiAgICAgaWYgKCFt
X3N1c3BlbmRlZCkKICAgICAgICAgcHJvY2Vzc1BlbmRpbmdUYXNrcygpOwogfQogCiB2b2lkIFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2VF
cnJvcigpCiB7Ci0gICAgbV9wZW5kaW5nVGFza3MuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4oY3JlYXRlQ2FsbGJhY2tUYXNrKCZkaWRSZWNlaXZl
TWVzc2FnZUVycm9yQ2FsbGJhY2ssIHRoaXMpKSk7CisgICAgbV9wZW5kaW5nVGFza3MuYXBwZW5k
KHN0ZDo6bWFrZV91bmlxdWU8Q3Jvc3NUaHJlYWRUYXNrPigmZGlkUmVjZWl2ZU1lc3NhZ2VFcnJv
ckNhbGxiYWNrLCB0aGlzKSk7CiAgICAgaWYgKCFtX3N1c3BlbmRlZCkKICAgICAgICAgcHJvY2Vz
c1BlbmRpbmdUYXNrcygpOwogfQpAQCAtMjI4LDcgKzIyNyw3IEBAIHZvaWQgVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmEKICAgICBpZiAoIW1fc3luY01ldGhvZERvbmUpIHsKICAg
ICAgICAgLy8gV2hlbiBhIHN5bmNocm9ub3VzIG9wZXJhdGlvbiBpcyBpbiBwcm9ncmVzcyAoaS5l
LiB0aGUgZXhlY3V0aW9uIHN0YWNrIGNvbnRhaW5zCiAgICAgICAgIC8vIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjp3YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpKSwgd2UgY2Fubm90
IGludm9rZSBjYWxsYmFja3MgaW4gdGhpcyBydW4gbG9vcC4KLSAgICAgICAgbV9jb250ZXh0LT5w
b3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50V3JhcHBlcjo6cHJvY2Vzc1BlbmRpbmdUYXNrc0NhbGxiYWNrLCB0aGlzKSk7CisgICAgICAg
IG1fY29udGV4dC0+cG9zdFRhc2soQ3Jvc3NUaHJlYWRUYXNrKCZUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXI6OnByb2Nlc3NQZW5kaW5nVGFza3NDYWxsYmFjaywgdGhpcykp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAJKHJldmlzaW9uIDE2ODYxNikKKysrIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsOjpQCiAgICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFubmVsIHx8ICFt
X3dvcmtlckNsaWVudFdyYXBwZXIpCiAgICAgICAgIHJldHVybjsKICAgICBUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBzZW5kUmVxdWVzdFJlc3VsdCA9IG1fbWFpbldlYlNv
Y2tldENoYW5uZWwtPnNlbmQobWVzc2FnZSk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zv
ck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFs
U2NvcGVEaWRTZW5kLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIHNlbmRSZXF1ZXN0UmVzdWx0KSwg
bV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckds
b2JhbFNjb3BlKENyb3NzVGhyZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRTZW5kLCBtX3dv
cmtlckNsaWVudFdyYXBwZXIsIHNlbmRSZXF1ZXN0UmVzdWx0KSwgbV90YXNrTW9kZSk7CiB9CiAK
IHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnNlbmQoY29uc3Qg
QXJyYXlCdWZmZXImIGJpbmFyeURhdGEpCkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UAogICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hh
bm5lbCB8fCAhbV93b3JrZXJDbGllbnRXcmFwcGVyKQogICAgICAgICByZXR1cm47CiAgICAgVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlNlbmRSZXN1bHQgc2VuZFJlcXVlc3RSZXN1bHQgPSBt
X21haW5XZWJTb2NrZXRDaGFubmVsLT5zZW5kKGJpbmFyeURhdGEsIDAsIGJpbmFyeURhdGEuYnl0
ZUxlbmd0aCgpKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xv
YmFsU2NvcGUoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZFNlbmQsIG1f
d29ya2VyQ2xpZW50V3JhcHBlciwgc2VuZFJlcXVlc3RSZXN1bHQpLCBtX3Rhc2tNb2RlKTsKKyAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoQ3Jvc3NU
aHJlYWRUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZFNlbmQsIG1fd29ya2VyQ2xpZW50V3JhcHBl
ciwgc2VuZFJlcXVlc3RSZXN1bHQpLCBtX3Rhc2tNb2RlKTsKIH0KIAogdm9pZCBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6c2VuZChCbG9iJiBiaW5hcnlEYXRhKQpAQCAt
MTk4LDcgKzE5OCw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlAK
ICAgICBpZiAoIW1fbWFpbldlYlNvY2tldENoYW5uZWwgfHwgIW1fd29ya2VyQ2xpZW50V3JhcHBl
cikKICAgICAgICAgcmV0dXJuOwogICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5k
UmVzdWx0IHNlbmRSZXF1ZXN0UmVzdWx0ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+c2VuZChi
aW5hcnlEYXRhKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xv
YmFsU2NvcGUoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZFNlbmQsIG1f
d29ya2VyQ2xpZW50V3JhcHBlciwgc2VuZFJlcXVlc3RSZXN1bHQpLCBtX3Rhc2tNb2RlKTsKKyAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoQ3Jvc3NU
aHJlYWRUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZFNlbmQsIG1fd29ya2VyQ2xpZW50V3JhcHBl
ciwgc2VuZFJlcXVlc3RSZXN1bHQpLCBtX3Rhc2tNb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgd29y
a2VyR2xvYmFsU2NvcGVEaWRHZXRCdWZmZXJlZEFtb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCkK
QEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpQCiAgICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFubmVsIHx8ICFtX3dvcmtlckNsaWVudFdy
YXBwZXIpCiAgICAgICAgIHJldHVybjsKICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50
ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+YnVmZmVyZWRBbW91bnQoKTsKLSAgICBtX2xvYWRl
clByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoY3JlYXRlQ2FsbGJhY2tU
YXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZEdldEJ1ZmZlcmVkQW1vdW50LCBtX3dvcmtlckNsaWVu
dFdyYXBwZXIsIGJ1ZmZlcmVkQW1vdW50KSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94
eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhyZWFkVGFzaygmd29y
a2VyR2xvYmFsU2NvcGVEaWRHZXRCdWZmZXJlZEFtb3VudCwgbV93b3JrZXJDbGllbnRXcmFwcGVy
LCBidWZmZXJlZEFtb3VudCksIG1fdGFza01vZGUpOwogfQogCiB2b2lkIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpjbG9zZShpbnQgY29kZSwgY29uc3QgU3RyaW5nJiBy
ZWFzb24pCkBAIC0yNjgsNyArMjY4LDcgQEAgc3RhdGljIHZvaWQgd29ya2VyR2xvYmFsU2NvcGVE
aWRDb25uZWN0KAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6
ZGlkQ29ubmVjdCgpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLSAgICBtX2xvYWRl
clByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoY3JlYXRlQ2FsbGJhY2tU
YXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZENvbm5lY3QsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwg
bV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+c3VicHJvdG9jb2woKSwgbV9tYWluV2ViU29ja2V0Q2hh
bm5lbC0+ZXh0ZW5zaW9ucygpKSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0
VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhyZWFkVGFzaygmd29ya2VyR2xv
YmFsU2NvcGVEaWRDb25uZWN0LCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIG1fbWFpbldlYlNvY2tl
dENoYW5uZWwtPnN1YnByb3RvY29sKCksIG1fbWFpbldlYlNvY2tldENoYW5uZWwtPmV4dGVuc2lv
bnMoKSksIG1fdGFza01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3JrZXJHbG9iYWxTY29wZURp
ZFJlY2VpdmVNZXNzYWdlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRX
cmFwcGVyLCBjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCkBAIC0yODAsNyArMjgwLDcgQEAgc3RhdGlj
IHZvaWQgd29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlTQogdm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgbV9sb2FkZXJQcm94
eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygm
d29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlTWVzc2FnZSwgbV93b3JrZXJDbGllbnRXcmFwcGVy
LCBtZXNzYWdlKSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1v
ZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhyZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVE
aWRSZWNlaXZlTWVzc2FnZSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBtZXNzYWdlKSwgbV90YXNr
TW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZUJpbmFy
eURhdGEoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIFBh
c3NPd25QdHI8VmVjdG9yPGNoYXI+PiBiaW5hcnlEYXRhKQpAQCAtMjkyLDcgKzI5Miw3IEBAIHN0
YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkUmVjZWl2ZUIKIHZvaWQgV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OmRpZFJlY2VpdmVCaW5hcnlEYXRhKFBhc3NPd25Q
dHI8VmVjdG9yPGNoYXI+PiBiaW5hcnlEYXRhKQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3Bl
KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlQmluYXJ5RGF0
YSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBiaW5hcnlEYXRhKSwgbV90YXNrTW9kZSk7CisgICAg
bV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhy
ZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlQmluYXJ5RGF0YSwgbV93b3JrZXJD
bGllbnRXcmFwcGVyLCBiaW5hcnlEYXRhKSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lk
IHdvcmtlckdsb2JhbFNjb3BlRGlkVXBkYXRlQnVmZmVyZWRBbW91bnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRB
bW91bnQpCkBAIC0zMDQsNyArMzA0LDcgQEAgc3RhdGljIHZvaWQgd29ya2VyR2xvYmFsU2NvcGVE
aWRVcGRhdGVCdQogdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6
ZGlkVXBkYXRlQnVmZmVyZWRBbW91bnQodW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCkKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tG
b3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckdsb2Jh
bFNjb3BlRGlkVXBkYXRlQnVmZmVyZWRBbW91bnQsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgYnVm
ZmVyZWRBbW91bnQpLCBtX3Rhc2tNb2RlKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9y
TW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoQ3Jvc3NUaHJlYWRUYXNrKCZ3b3JrZXJHbG9iYWxTY29w
ZURpZFVwZGF0ZUJ1ZmZlcmVkQW1vdW50LCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGJ1ZmZlcmVk
QW1vdW50KSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3Bl
RGlkU3RhcnRDbG9zaW5nSGFuZHNoYWtlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3Jr
ZXJDbGllbnRXcmFwcGVyKQpAQCAtMzE2LDcgKzMxNiw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckds
b2JhbFNjb3BlRGlkU3RhcnRDbG8KIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OlBlZXI6OmRpZFN0YXJ0Q2xvc2luZ0hhbmRzaGFrZSgpCiB7CiAgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xv
YmFsU2NvcGUoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZFN0YXJ0Q2xv
c2luZ0hhbmRzaGFrZSwgbV93b3JrZXJDbGllbnRXcmFwcGVyKSwgbV90YXNrTW9kZSk7CisgICAg
bV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhy
ZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRTdGFydENsb3NpbmdIYW5kc2hha2UsIG1fd29y
a2VyQ2xpZW50V3JhcHBlciksIG1fdGFza01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3JrZXJH
bG9iYWxTY29wZURpZENsb3NlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGll
bnRXcmFwcGVyLCB1bnNpZ25lZCBsb25nIHVuaGFuZGxlZEJ1ZmZlcmVkQW1vdW50LCBXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50OjpDbG9zaW5nSGFuZHNoYWtlQ29tcGxldGlvblN0YXR1cyBjbG9zaW5n
SGFuZHNoYWtlQ29tcGxldGlvbiwgdW5zaWduZWQgc2hvcnQgY29kZSwgY29uc3QgU3RyaW5nJiBy
ZWFzb24pCkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6UAogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgbV9tYWluV2Vi
U29ja2V0Q2hhbm5lbCA9IDA7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dv
cmtlckdsb2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRD
bG9zZSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCB1bmhhbmRsZWRCdWZmZXJlZEFtb3VudCwgY2xv
c2luZ0hhbmRzaGFrZUNvbXBsZXRpb24sIGNvZGUsIHJlYXNvbiksIG1fdGFza01vZGUpOworICAg
IG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShDcm9zc1Ro
cmVhZFRhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkQ2xvc2UsIG1fd29ya2VyQ2xpZW50V3JhcHBl
ciwgdW5oYW5kbGVkQnVmZmVyZWRBbW91bnQsIGNsb3NpbmdIYW5kc2hha2VDb21wbGV0aW9uLCBj
b2RlLCByZWFzb24pLCBtX3Rhc2tNb2RlKTsKIH0KIAogc3RhdGljIHZvaWQgd29ya2VyR2xvYmFs
U2NvcGVEaWRSZWNlaXZlTWVzc2FnZUVycm9yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyKQpAQCAtMzQxLDcgKzM0MSw3IEBAIHN0YXRpYyB2b2lkIHdvcmtl
ckdsb2JhbFNjb3BlRGlkUmVjZWl2ZU0KIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OlBlZXI6OmRpZFJlY2VpdmVNZXNzYWdlRXJyb3IoKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckds
b2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZl
TWVzc2FnZUVycm9yLCBtX3dvcmtlckNsaWVudFdyYXBwZXIpLCBtX3Rhc2tNb2RlKTsKKyAgICBt
X2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoQ3Jvc3NUaHJl
YWRUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZFJlY2VpdmVNZXNzYWdlRXJyb3IsIG1fd29ya2Vy
Q2xpZW50V3JhcHBlciksIG1fdGFza01vZGUpOwogfQogCiBXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6QnJpZGdlOjpCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIFBhc3NSZWZQdHI8V29y
a2VyR2xvYmFsU2NvcGU+IHdvcmtlckdsb2JhbFNjb3BlLCBjb25zdCBTdHJpbmcmIHRhc2tNb2Rl
KQpAQCAtMzcxLDcgKzM3MSw3IEBAIHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OkIKICAgICAgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtlckds
b2JhbFNjb3BlKCkpOwogICAgICAgICBpZiAoY2xpZW50V3JhcHBlci0+ZmFpbGVkV2ViU29ja2V0
Q2hhbm5lbENyZWF0aW9uKCkpIHsKICAgICAgICAgICAgIC8vIElmIEJyaWRnZTo6aW5pdGlhbGl6
ZSgpIHF1aXR0ZWQgZWFybGllciwgd2UgbmVlZCB0byBraWNrIG1haW5UaHJlYWREZXN0cm95KCkg
dG8gZGVsZXRlIHRoZSBwZWVyLgotICAgICAgICAgICAgbG9hZGVyUHJveHktPnBvc3RUYXNrVG9M
b2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6bWFpblRocmVhZERlc3Ryb3ksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MocGVlclB0cikpKTsK
KyAgICAgICAgICAgIGxvYWRlclByb3h5LT5wb3N0VGFza1RvTG9hZGVyKENyb3NzVGhyZWFkVGFz
aygmV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWREZXN0cm95LCBB
bGxvd0Nyb3NzVGhyZWFkQWNjZXNzKHBlZXJQdHIpKSk7CiAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgY2xpZW50V3JhcHBlci0+ZGlkQ3JlYXRlV2ViU29ja2V0Q2hhbm5lbChwZWVyUHRyKTsK
ICAgICB9IH0sIHRhc2tNb2RlKTsKQEAgLTM4Niw5ICszODYsNyBAQCB2b2lkIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCCiAgICAgQVNTRVJUKCFtX3BlZXIpOwogICAgIHNldE1l
dGhvZE5vdENvbXBsZXRlZCgpOwogICAgIFJlZjxCcmlkZ2U+IHByb3RlY3QoKnRoaXMpOwotICAg
IG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcigKLSAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZCcmlkZ2U6Om1haW5UaHJlYWRJbml0aWFsaXplLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2VzcygmbV9sb2FkZXJQcm94eSksIG1fd29ya2VyQ2xp
ZW50V3JhcHBlciwgbV90YXNrTW9kZSkpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xv
YWRlcihDcm9zc1RocmVhZFRhc2soJkJyaWRnZTo6bWFpblRocmVhZEluaXRpYWxpemUsIEFsbG93
Q3Jvc3NUaHJlYWRBY2Nlc3MoJm1fbG9hZGVyUHJveHkpLCBtX3dvcmtlckNsaWVudFdyYXBwZXIs
IG1fdGFza01vZGUpKTsKICAgICB3YWl0Rm9yTWV0aG9kQ29tcGxldGlvbigpOwogICAgIC8vIG1f
cGVlciBtYXkgYmUgbnVsbCB3aGVuIHRoZSBuZXN0ZWQgcnVubG9vcCBleGl0ZWQgYmVmb3JlIGEg
cGVlciBoYXMgY3JlYXRlZC4KICAgICBtX3BlZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXItPnBl
ZXIoKTsKQEAgLTQxMCw3ICs0MDgsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpCCiAgICAgQVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlcik7CiAgICAgaWYgKCFt
X3BlZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2Fk
ZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6
bWFpblRocmVhZENvbm5lY3QsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgdXJsLCBw
cm90b2NvbCkpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVh
ZFRhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkQ29ubmVj
dCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhtX3BlZXIpLCB1cmwsIHByb3RvY29sKSk7CiB9CiAK
IHZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRTZW5kKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBlZXIqIHBlZXIsIGNvbnN0IFN0cmluZyYg
bWVzc2FnZSkKQEAgLTQ0Nyw3ICs0NDUsNyBAQCBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6
U2VuZFJlc3VsdCBXCiAgICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIgfHwgIW1fcGVlcikK
ICAgICAgICAgcmV0dXJuIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kRmFpbDsKICAg
ICBzZXRNZXRob2ROb3RDb21wbGV0ZWQoKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9M
b2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6bWFpblRocmVhZFNlbmQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgbWVzc2Fn
ZSkpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRhc2so
JldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkU2VuZCwgQWxsb3dD
cm9zc1RocmVhZEFjY2VzcyhtX3BlZXIpLCBtZXNzYWdlKSk7CiAgICAgUmVmPEJyaWRnZT4gcHJv
dGVjdCgqdGhpcyk7CiAgICAgd2FpdEZvck1ldGhvZENvbXBsZXRpb24oKTsKICAgICBUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBtX3dvcmtl
ckNsaWVudFdyYXBwZXIuZ2V0KCk7CkBAIC00NjUsNyArNDYzLDcgQEAgVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OlNlbmRSZXN1bHQgVwogICAgIGlmIChiaW5hcnlEYXRhLmJ5dGVMZW5ndGgo
KSkKICAgICAgICAgbWVtY3B5KGRhdGEtPmRhdGEoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KGJpbmFyeURhdGEuZGF0YSgpKSArIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGgpOwogICAgIHNldE1l
dGhvZE5vdENvbXBsZXRlZCgpOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihj
cmVhdGVDYWxsYmFja1Rhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWlu
VGhyZWFkU2VuZEFycmF5QnVmZmVyLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVlciksIGRh
dGEucmVsZWFzZSgpKSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKENyb3Nz
VGhyZWFkVGFzaygmV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRT
ZW5kQXJyYXlCdWZmZXIsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgZGF0YS5yZWxl
YXNlKCkpKTsKICAgICBSZWY8QnJpZGdlPiBwcm90ZWN0KCp0aGlzKTsKICAgICB3YWl0Rm9yTWV0
aG9kQ29tcGxldGlvbigpOwogICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlciogY2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKTsKQEAgLTQ3
OSw3ICs0NzcsNyBAQCBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6U2VuZFJlc3VsdCBXCiAg
ICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIgfHwgIW1fcGVlcikKICAgICAgICAgcmV0dXJu
IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpTZW5kRmFpbDsKICAgICBzZXRNZXRob2ROb3RD
b21wbGV0ZWQoKTsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNl
bmRCbG9iLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVlciksIGJpbmFyeURhdGEudXJsKCks
IGJpbmFyeURhdGEudHlwZSgpLCBiaW5hcnlEYXRhLnNpemUoKSkpOworICAgIG1fbG9hZGVyUHJv
eHkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRhc2soJldvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjptYWluVGhyZWFkU2VuZEJsb2IsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3Mo
bV9wZWVyKSwgYmluYXJ5RGF0YS51cmwoKSwgYmluYXJ5RGF0YS50eXBlKCksIGJpbmFyeURhdGEu
c2l6ZSgpKSk7CiAgICAgUmVmPEJyaWRnZT4gcHJvdGVjdCgqdGhpcyk7CiAgICAgd2FpdEZvck1l
dGhvZENvbXBsZXRpb24oKTsKICAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXIqIGNsaWVudFdyYXBwZXIgPSBtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCk7CkBAIC01
MDIsNyArNTAwLDcgQEAgdW5zaWduZWQgbG9uZyBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Qwog
ICAgIGlmICghbV93b3JrZXJDbGllbnRXcmFwcGVyIHx8ICFtX3BlZXIpCiAgICAgICAgIHJldHVy
biAwOwogICAgIHNldE1ldGhvZE5vdENvbXBsZXRlZCgpOwotICAgIG1fbG9hZGVyUHJveHkucG9z
dFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjptYWluVGhyZWFkQnVmZmVyZWRBbW91bnQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MobV9wZWVyKSkpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1Ro
cmVhZFRhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkQnVm
ZmVyZWRBbW91bnQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSkpOwogICAgIFJlZjxC
cmlkZ2U+IHByb3RlY3QoKnRoaXMpOwogICAgIHdhaXRGb3JNZXRob2RDb21wbGV0aW9uKCk7CiAg
ICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKiBjbGllbnRXcmFwcGVy
ID0gbV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpOwpAQCAtNTI0LDcgKzUyMiw3IEBAIHZvaWQg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OkIKIHsKICAgICBpZiAoIW1fcGVlcikK
ICAgICAgICAgcmV0dXJuOwotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihjcmVh
dGVDYWxsYmFja1Rhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhy
ZWFkQ2xvc2UsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSwgY29kZSwgcmVhc29uKSk7
CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKENyb3NzVGhyZWFkVGFzaygmV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRDbG9zZSwgQWxsb3dDcm9z
c1RocmVhZEFjY2VzcyhtX3BlZXIpLCBjb2RlLCByZWFzb24pKTsKIH0KIAogdm9pZCBXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZEZhaWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGVlciogcGVlciwgY29uc3QgU3RyaW5nJiByZWFzb24pCkBAIC01
NDAsNyArNTM4LDcgQEAgdm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Qgog
ewogICAgIGlmICghbV9wZWVyKQogICAgICAgICByZXR1cm47Ci0gICAgbV9sb2FkZXJQcm94eS5w
b3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6Om1haW5UaHJlYWRGYWlsLCBBbGxvd0Nyb3NzVGhyZWFkQWNjZXNzKG1fcGVl
ciksIHJlYXNvbikpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1Ro
cmVhZFRhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkRmFp
bCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhtX3BlZXIpLCByZWFzb24pKTsKIH0KIAogdm9pZCBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZERlc3Ryb3koU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGVlciogcGVlclB0cikKQEAgLTU1NCw3ICs1NTIs
NyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCCiB7CiAgICAgY2xl
YXJDbGllbnRXcmFwcGVyKCk7CiAgICAgaWYgKG1fcGVlcikgewotICAgICAgICBtX2xvYWRlclBy
b3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZERlc3Ryb3ksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MobV9wZWVyKSkpOworICAgICAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoQ3Jv
c3NUaHJlYWRUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVh
ZERlc3Ryb3ksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3MobV9wZWVyKSkpOwogICAgICAgICBtX3Bl
ZXIgPSBudWxscHRyOwogICAgIH0KICAgICBtX3dvcmtlckdsb2JhbFNjb3BlID0gbnVsbHB0cjsK
QEAgLTU3Myw3ICs1NzEsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpCCiB7CiAgICAgaWYgKCFtX3BlZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2xvYWRlclBy
b3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFN1c3BlbmQsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MobV9wZWVyKSkpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1Ro
cmVhZFRhc2soJldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkU3Vz
cGVuZCwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhtX3BlZXIpKSk7CiB9CiAKIHZvaWQgV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRSZXN1bWUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgUGVlciogcGVlcikKQEAgLTU4OSw3ICs1ODcsNyBAQCB2b2lk
IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCCiB7CiAgICAgaWYgKCFtX3BlZXIp
CiAgICAgICAgIHJldHVybjsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRo
cmVhZFJlc3VtZSwgQWxsb3dDcm9zc1RocmVhZEFjY2VzcyhtX3BlZXIpKSk7CisgICAgbV9sb2Fk
ZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKENyb3NzVGhyZWFkVGFzaygmV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRSZXN1bWUsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nl
c3MobV9wZWVyKSkpOwogfQogCiB2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
OjpCcmlkZ2U6OmNsZWFyQ2xpZW50V3JhcHBlcigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q3Jvc3NUaHJlYWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Nyb3Nz
VGhyZWFkVGFzay5oCShyZXZpc2lvbiAxNjg2MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ3Jv
c3NUaHJlYWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDQyMiArMzgsMTUgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0vLyBUcmFpdHMgZm9yIHRoZSBDcm9zc1RocmVhZFRhc2suCi10
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzIHsKLSAgICB0
eXBlZGVmIGNvbnN0IFQmIFBhcmFtVHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBDcm9zc1RocmVhZFRhc2tUcmFpdHM8VCo+IHsKLSAgICB0eXBlZGVmIFQqIFBhcmFtVHlw
ZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBDcm9zc1RocmVhZFRhc2tUcmFp
dHM8UGFzc1JlZlB0cjxUPj4gewotICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxUPiBQYXJhbVR5cGU7
Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PHN0ZDo6dW5pcXVlX3B0cjxUPj4gewotICAgIHR5cGVkZWYgc3RkOjp1bmlxdWVfcHRyPFQ+IFBh
cmFtVHlwZTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDE+Ci1jbGFz
cyBDcm9zc1RocmVhZFRhc2sxIHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2Qp
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEpOwotICAgIHR5cGVkZWYgQ3Jvc3NUaHJlYWRU
YXNrMTxQMSwgTVAxPiBDcm9zc1RocmVhZFRhc2s7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9z
c1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOwotCi0gICAgQ3Jvc3NUaHJl
YWRUYXNrMShNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSkKLSAgICAgICAgOiBtX21l
dGhvZChtZXRob2QpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCi0gICAgewot
ICAgIH0KLQotICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKLSAgICB7Ci0gICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVyMSk7
Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE1ldGhvZCBtX21ldGhvZDsKLSAgICBQMSBtX3BhcmFt
ZXRlcjE7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFt
ZSBQMiwgdHlwZW5hbWUgTVAyPgotY2xhc3MgQ3Jvc3NUaHJlYWRUYXNrMiB7Ci1wdWJsaWM6Ci0g
ICAgdHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBN
UDIpOwotICAgIHR5cGVkZWYgQ3Jvc3NUaHJlYWRUYXNrMjxQMSwgTVAxLCBQMiwgTVAyPiBDcm9z
c1RocmVhZFRhc2s7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8
UDE+OjpQYXJhbVR5cGUgUGFyYW0xOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRU
YXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKLQotICAgIENyb3NzVGhyZWFkVGFzazIo
TWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFtZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyKQotICAg
ICAgICA6IG1fbWV0aG9kKG1ldGhvZCkKLSAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVy
MSkKLSAgICAgICAgLCBtX3BhcmFtZXRlcjIocGFyYW1ldGVyMikKLSAgICB7Ci0gICAgfQotCi0g
ICAgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQotICAg
IHsKLSAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRl
cjIpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNZXRob2QgbV9tZXRob2Q7Ci0gICAgUDEgbV9w
YXJhbWV0ZXIxOwotICAgIFAyIG1fcGFyYW1ldGVyMjsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1l
IFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAz
LCB0eXBlbmFtZSBNUDM+Ci1jbGFzcyBDcm9zc1RocmVhZFRhc2szIHsKLXB1YmxpYzoKLSAgICB0
eXBlZGVmIHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwg
TVAzKTsKLSAgICB0eXBlZGVmIENyb3NzVGhyZWFkVGFzazM8UDEsIE1QMSwgUDIsIE1QMiwgUDMs
IE1QMz4gQ3Jvc3NUaHJlYWRUYXNrOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRU
YXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFtMTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENy
b3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFtVHlwZSBQYXJhbTI7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDM+OjpQYXJhbVR5cGUgUGFyYW0zOwotCi0g
ICAgQ3Jvc3NUaHJlYWRUYXNrMyhNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFy
YW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzKQotICAgICAgICA6IG1fbWV0aG9kKG1l
dGhvZCkKLSAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKLSAgICAgICAgLCBtX3Bh
cmFtZXRlcjIocGFyYW1ldGVyMikKLSAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykK
LSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJh
bWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMyk7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIE1ldGhvZCBtX21ldGhvZDsKLSAgICBQMSBtX3BhcmFtZXRlcjE7Ci0gICAgUDIgbV9wYXJh
bWV0ZXIyOwotICAgIFAzIG1fcGFyYW1ldGVyMzsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFAx
LCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0
eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQ+Ci1jbGFzcyBDcm9zc1RocmVh
ZFRhc2s0IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2QpKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQpOwotICAgIHR5cGVkZWYgQ3Jvc3NUaHJl
YWRUYXNrNDxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0PiBDcm9zc1RocmVhZFRh
c2s7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJh
bVR5cGUgUGFyYW0xOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRz
PFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFk
VGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBD
cm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OwotCi0gICAgQ3Jvc3NU
aHJlYWRUYXNrNChNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFt
ZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCkKLSAgICAgICAgOiBt
X21ldGhvZChtZXRob2QpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIxKHBhcmFtZXRlcjEpCi0gICAg
ICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIzKHBh
cmFtZXRlcjMpCi0gICAgICAgICwgbV9wYXJhbWV0ZXI0KHBhcmFtZXRlcjQpCi0gICAgewotICAg
IH0KLQotICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKLSAgICB7Ci0gICAgICAgICgqbV9tZXRob2QpKGNvbnRleHQsIG1fcGFyYW1ldGVyMSwgbV9w
YXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVyNCk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIE1ldGhvZCBtX21ldGhvZDsKLSAgICBQMSBtX3BhcmFtZXRlcjE7Ci0gICAgUDIgbV9w
YXJhbWV0ZXIyOwotICAgIFAzIG1fcGFyYW1ldGVyMzsKLSAgICBQNCBtX3BhcmFtZXRlcjQ7Ci19
OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlw
ZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5h
bWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1PgotY2xhc3MgQ3Jvc3NUaHJlYWRUYXNr
NSB7Ci1wdWJsaWM6Ci0gICAgdHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpOwotICAgIHR5cGVkZWYgQ3Jvc3NUaHJl
YWRUYXNrNTxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1PiBDcm9z
c1RocmVhZFRhc2s7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8
UDE+OjpQYXJhbVR5cGUgUGFyYW0xOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRU
YXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBhcmFtMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENy
b3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OwotICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBh
cmFtNTsKLQotICAgIENyb3NzVGhyZWFkVGFzazUoTWV0aG9kIG1ldGhvZCwgUGFyYW0xIHBhcmFt
ZXRlcjEsIFBhcmFtMiBwYXJhbWV0ZXIyLCBQYXJhbTMgcGFyYW1ldGVyMywgUGFyYW00IHBhcmFt
ZXRlcjQsIFBhcmFtNSBwYXJhbWV0ZXI1KQotICAgICAgICA6IG1fbWV0aG9kKG1ldGhvZCkKLSAg
ICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKLSAgICAgICAgLCBtX3BhcmFtZXRlcjIo
cGFyYW1ldGVyMikKLSAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKLSAgICAgICAg
LCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKLSAgICAgICAgLCBtX3BhcmFtZXRlcjUocGFyYW1l
dGVyNSkKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0KQotICAgIHsKLSAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwg
bV9wYXJhbWV0ZXIxLCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBt
X3BhcmFtZXRlcjUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBNZXRob2QgbV9tZXRob2Q7Ci0g
ICAgUDEgbV9wYXJhbWV0ZXIxOwotICAgIFAyIG1fcGFyYW1ldGVyMjsKLSAgICBQMyBtX3BhcmFt
ZXRlcjM7Ci0gICAgUDQgbV9wYXJhbWV0ZXI0OwotICAgIFA1IG1fcGFyYW1ldGVyNTsKLX07Ci0K
LXRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFt
ZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBN
UDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDUsIHR5cGVuYW1lIFA2LCB0eXBlbmFtZSBNUDY+
Ci1jbGFzcyBDcm9zc1RocmVhZFRhc2s2IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpN
ZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSwg
TVA2KTsKLSAgICB0eXBlZGVmIENyb3NzVGhyZWFkVGFzazY8UDEsIE1QMSwgUDIsIE1QMiwgUDMs
IE1QMywgUDQsIE1QNCwgUDUsIE1QNSwgUDYsIE1QNj4gQ3Jvc3NUaHJlYWRUYXNrOwotICAgIHR5
cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAxPjo6UGFyYW1UeXBlIFBhcmFt
MTsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMj46OlBhcmFt
VHlwZSBQYXJhbTI7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8
UDM+OjpQYXJhbVR5cGUgUGFyYW0zOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRU
YXNrVHJhaXRzPFA0Pjo6UGFyYW1UeXBlIFBhcmFtNDsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENy
b3NzVGhyZWFkVGFza1RyYWl0czxQNT46OlBhcmFtVHlwZSBQYXJhbTU7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDY+OjpQYXJhbVR5cGUgUGFyYW02OwotCi0g
ICAgQ3Jvc3NUaHJlYWRUYXNrNihNZXRob2QgbWV0aG9kLCBQYXJhbTEgcGFyYW1ldGVyMSwgUGFy
YW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJhbTQgcGFyYW1ldGVyNCwgUGFy
YW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2KQotICAgICAgICA6IG1fbWV0aG9kKG1l
dGhvZCkKLSAgICAgICAgLCBtX3BhcmFtZXRlcjEocGFyYW1ldGVyMSkKLSAgICAgICAgLCBtX3Bh
cmFtZXRlcjIocGFyYW1ldGVyMikKLSAgICAgICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykK
LSAgICAgICAgLCBtX3BhcmFtZXRlcjQocGFyYW1ldGVyNCkKLSAgICAgICAgLCBtX3BhcmFtZXRl
cjUocGFyYW1ldGVyNSkKLSAgICAgICAgLCBtX3BhcmFtZXRlcjYocGFyYW1ldGVyNikKLSAgICB7
Ci0gICAgfQotCi0gICAgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0KQotICAgIHsKLSAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIx
LCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUs
IG1fcGFyYW1ldGVyNik7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE1ldGhvZCBtX21ldGhvZDsK
LSAgICBQMSBtX3BhcmFtZXRlcjE7Ci0gICAgUDIgbV9wYXJhbWV0ZXIyOwotICAgIFAzIG1fcGFy
YW1ldGVyMzsKLSAgICBQNCBtX3BhcmFtZXRlcjQ7Ci0gICAgUDUgbV9wYXJhbWV0ZXI1OwotICAg
IFA2IG1fcGFyYW1ldGVyNjsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBN
UDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMs
IHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDUsIHR5
cGVuYW1lIFA2LCB0eXBlbmFtZSBNUDYsIHR5cGVuYW1lIFA3LCB0eXBlbmFtZSBNUDc+Ci1jbGFz
cyBDcm9zc1RocmVhZFRhc2s3IHsKLXB1YmxpYzoKLSAgICB0eXBlZGVmIHZvaWQgKCpNZXRob2Qp
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzLCBNUDQsIE1QNSwgTVA2LCBN
UDcpOwotICAgIHR5cGVkZWYgQ3Jvc3NUaHJlYWRUYXNrNzxQMSwgTVAxLCBQMiwgTVAyLCBQMywg
TVAzLCBQNCwgTVA0LCBQNSwgTVA1LCBQNiwgTVA2LCBQNywgTVA3PiBDcm9zc1RocmVhZFRhc2s7
Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5
cGUgUGFyYW0xOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAy
Pjo6UGFyYW1UeXBlIFBhcmFtMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFz
a1RyYWl0czxQMz46OlBhcmFtVHlwZSBQYXJhbTM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9z
c1RocmVhZFRhc2tUcmFpdHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OwotICAgIHR5cGVkZWYgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKLSAgICB0
eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQNj46OlBhcmFtVHlwZSBQYXJh
bTY7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDc+OjpQYXJh
bVR5cGUgUGFyYW03OwotCi0gICAgQ3Jvc3NUaHJlYWRUYXNrNyhNZXRob2QgbWV0aG9kLCBQYXJh
bTEgcGFyYW1ldGVyMSwgUGFyYW0yIHBhcmFtZXRlcjIsIFBhcmFtMyBwYXJhbWV0ZXIzLCBQYXJh
bTQgcGFyYW1ldGVyNCwgUGFyYW01IHBhcmFtZXRlcjUsIFBhcmFtNiBwYXJhbWV0ZXI2LCBQYXJh
bTcgcGFyYW1ldGVyNykKLSAgICAgICAgOiBtX21ldGhvZChtZXRob2QpCi0gICAgICAgICwgbV9w
YXJhbWV0ZXIxKHBhcmFtZXRlcjEpCi0gICAgICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFtZXRlcjIp
Ci0gICAgICAgICwgbV9wYXJhbWV0ZXIzKHBhcmFtZXRlcjMpCi0gICAgICAgICwgbV9wYXJhbWV0
ZXI0KHBhcmFtZXRlcjQpCi0gICAgICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFtZXRlcjUpCi0gICAg
ICAgICwgbV9wYXJhbWV0ZXI2KHBhcmFtZXRlcjYpCi0gICAgICAgICwgbV9wYXJhbWV0ZXI3KHBh
cmFtZXRlcjcpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgcGVyZm9ybVRhc2soU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCkKLSAgICB7Ci0gICAgICAgICgqbV9tZXRob2QpKGNvbnRl
eHQsIG1fcGFyYW1ldGVyMSwgbV9wYXJhbWV0ZXIyLCBtX3BhcmFtZXRlcjMsIG1fcGFyYW1ldGVy
NCwgbV9wYXJhbWV0ZXI1LCBtX3BhcmFtZXRlcjYsIG1fcGFyYW1ldGVyNyk7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIE1ldGhvZCBtX21ldGhvZDsKLSAgICBQMSBtX3BhcmFtZXRlcjE7Ci0gICAg
UDIgbV9wYXJhbWV0ZXIyOwotICAgIFAzIG1fcGFyYW1ldGVyMzsKLSAgICBQNCBtX3BhcmFtZXRl
cjQ7Ci0gICAgUDUgbV9wYXJhbWV0ZXI1OwotICAgIFA2IG1fcGFyYW1ldGVyNjsKLSAgICBQNyBt
X3BhcmFtZXRlcjc7Ci19OwotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUgTVAxLCB0
eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAzLCB0eXBl
bmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUgTVA1LCB0eXBlbmFt
ZSBQNiwgdHlwZW5hbWUgTVA2LCB0eXBlbmFtZSBQNywgdHlwZW5hbWUgTVA3LCB0eXBlbmFtZSBQ
OCwgdHlwZW5hbWUgTVA4PgotY2xhc3MgQ3Jvc3NUaHJlYWRUYXNrOCB7CitjbGFzcyBDcm9zc1Ro
cmVhZFRhc2sgOiBwdWJsaWMgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayB7CiBwdWJsaWM6
Ci0gICAgdHlwZWRlZiB2b2lkICgqTWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAx
LCBNUDIsIE1QMywgTVA0LCBNUDUsIE1QNiwgTVA3LCBNUDgpOwotICAgIHR5cGVkZWYgQ3Jvc3NU
aHJlYWRUYXNrODxQMSwgTVAxLCBQMiwgTVAyLCBQMywgTVAzLCBQNCwgTVA0LCBQNSwgTVA1LCBQ
NiwgTVA2LCBQNywgTVA3LCBQOCwgTVA4PiBDcm9zc1RocmVhZFRhc2s7Ci0gICAgdHlwZWRlZiB0
eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDE+OjpQYXJhbVR5cGUgUGFyYW0xOwotICAg
IHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFAyPjo6UGFyYW1UeXBlIFBh
cmFtMjsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIENyb3NzVGhyZWFkVGFza1RyYWl0czxQMz46OlBh
cmFtVHlwZSBQYXJhbTM7Ci0gICAgdHlwZWRlZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFp
dHM8UDQ+OjpQYXJhbVR5cGUgUGFyYW00OwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJl
YWRUYXNrVHJhaXRzPFA1Pjo6UGFyYW1UeXBlIFBhcmFtNTsKLSAgICB0eXBlZGVmIHR5cGVuYW1l
IENyb3NzVGhyZWFkVGFza1RyYWl0czxQNj46OlBhcmFtVHlwZSBQYXJhbTY7Ci0gICAgdHlwZWRl
ZiB0eXBlbmFtZSBDcm9zc1RocmVhZFRhc2tUcmFpdHM8UDc+OjpQYXJhbVR5cGUgUGFyYW03Owot
ICAgIHR5cGVkZWYgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRUYXNrVHJhaXRzPFA4Pjo6UGFyYW1UeXBl
IFBhcmFtODsKLSAgICAKLSAgICBDcm9zc1RocmVhZFRhc2s4KE1ldGhvZCBtZXRob2QsIFBhcmFt
MSBwYXJhbWV0ZXIxLCBQYXJhbTIgcGFyYW1ldGVyMiwgUGFyYW0zIHBhcmFtZXRlcjMsIFBhcmFt
NCBwYXJhbWV0ZXI0LCBQYXJhbTUgcGFyYW1ldGVyNSwgUGFyYW02IHBhcmFtZXRlcjYsIFBhcmFt
NyBwYXJhbWV0ZXI3LCBQYXJhbTggcGFyYW1ldGVyOCkKLSAgICA6IG1fbWV0aG9kKG1ldGhvZCkK
LSAgICAsIG1fcGFyYW1ldGVyMShwYXJhbWV0ZXIxKQotICAgICwgbV9wYXJhbWV0ZXIyKHBhcmFt
ZXRlcjIpCi0gICAgLCBtX3BhcmFtZXRlcjMocGFyYW1ldGVyMykKLSAgICAsIG1fcGFyYW1ldGVy
NChwYXJhbWV0ZXI0KQotICAgICwgbV9wYXJhbWV0ZXI1KHBhcmFtZXRlcjUpCi0gICAgLCBtX3Bh
cmFtZXRlcjYocGFyYW1ldGVyNikKLSAgICAsIG1fcGFyYW1ldGVyNyhwYXJhbWV0ZXI3KQotICAg
ICwgbV9wYXJhbWV0ZXI4KHBhcmFtZXRlcjgpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lk
IHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgTWV0aG9kLCB0eXBlbmFtZS4uLiBQYXJhbWV0ZXJzPgorICAgIENyb3NzVGhy
ZWFkVGFzayhNZXRob2QgbWV0aG9kLCBjb25zdCBQYXJhbWV0ZXJzJi4uLiBwYXJhbWV0ZXJzKQor
ICAgICAgICA6IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2soc3RkOjpiaW5kKG1ldGhvZCwg
c3RkOjpwbGFjZWhvbGRlcnM6Ol8xLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQYXJhbWV0
ZXJzPjo6VHlwZShDcm9zc1RocmVhZENvcGllcjxQYXJhbWV0ZXJzPjo6Y29weShwYXJhbWV0ZXJz
KSkuLi4pKQogICAgIHsKLSAgICAgICAgKCptX21ldGhvZCkoY29udGV4dCwgbV9wYXJhbWV0ZXIx
LCBtX3BhcmFtZXRlcjIsIG1fcGFyYW1ldGVyMywgbV9wYXJhbWV0ZXI0LCBtX3BhcmFtZXRlcjUs
IG1fcGFyYW1ldGVyNiwgbV9wYXJhbWV0ZXI3LCBtX3BhcmFtZXRlcjgpOwogICAgIH0KLSAgICAK
LXByaXZhdGU6Ci0gICAgTWV0aG9kIG1fbWV0aG9kOwotICAgIFAxIG1fcGFyYW1ldGVyMTsKLSAg
ICBQMiBtX3BhcmFtZXRlcjI7Ci0gICAgUDMgbV9wYXJhbWV0ZXIzOwotICAgIFA0IG1fcGFyYW1l
dGVyNDsKLSAgICBQNSBtX3BhcmFtZXRlcjU7Ci0gICAgUDYgbV9wYXJhbWV0ZXI2OwotICAgIFA3
IG1fcGFyYW1ldGVyNzsKLSAgICBQOCBtX3BhcmFtZXRlcjg7CiB9OwogCi10ZW1wbGF0ZTx0eXBl
bmFtZSBQMSwgdHlwZW5hbWUgTVAxPgotU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzayBjcmVh
dGVDYWxsYmFja1Rhc2soCi0gICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIE1QMSksCi0gICAgY29uc3QgUDEmIHBhcmFtZXRlcjEpCi17Ci0gICAgYXV0byB0YXNrUHRy
ID0gbmV3IENyb3NzVGhyZWFkVGFzazE8dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpU
eXBlLCBNUDE+KAotICAgICAgICBtZXRob2QsCi0gICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6Y29weShwYXJhbWV0ZXIxKSk7Ci0gICAgcmV0dXJuIFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dHlwZW5hbWUgc3RkOjpy
ZW1vdmVfcG9pbnRlcjxkZWNsdHlwZSh0YXNrUHRyKT46OnR5cGU+IHRhc2sodGFza1B0cik7Ci0g
ICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKGNvbnRleHQpOwotICAgIH07Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDI+Ci1T
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIGNyZWF0ZUNhbGxiYWNrVGFzaygKLSAgICB2b2lk
ICgqbWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIpLAotICAgIGNvbnN0
IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMikKLXsKLSAgICBhdXRvIHRhc2tQ
dHIgPSBuZXcgQ3Jvc3NUaHJlYWRUYXNrMjx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46
OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDI+KAot
ICAgICAgICBtZXRob2QsCi0gICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29weShwYXJh
bWV0ZXIxKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpKTsKLSAgICBy
ZXR1cm4gWz1dIChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KSB7Ci0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjx0eXBlbmFtZSBzdGQ6OnJlbW92ZV9wb2ludGVyPGRlY2x0eXBlKHRhc2tQ
dHIpPjo6dHlwZT4gdGFzayh0YXNrUHRyKTsKLSAgICAgICAgdGFzay0+cGVyZm9ybVRhc2soY29u
dGV4dCk7Ci0gICAgfTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgUDEsIHR5cGVuYW1lIE1QMSwg
dHlwZW5hbWUgUDIsIHR5cGVuYW1lIE1QMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIE1QMz4KLVNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2sgY3JlYXRlQ2FsbGJhY2tUYXNrKAotICAgIHZvaWQg
KCptZXRob2QpKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNUDEsIE1QMiwgTVAzKSwKLSAgICBj
b25zdCBQMSYgcGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJh
bWV0ZXIzKQotewotICAgIGF1dG8gdGFza1B0ciA9IG5ldyBDcm9zc1RocmVhZFRhc2szPHR5cGVu
YW1lIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6VHlwZSwgTVAxLCB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQMj46OlR5cGUsIE1QMiwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+OjpU
eXBlLCBNUDM+KAotICAgICAgICBtZXRob2QsCi0gICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAx
Pjo6Y29weShwYXJhbWV0ZXIxKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRl
cjIpLAotICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMykpOwot
ICAgIHJldHVybiBbPV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIHsKLSAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8ZGVjbHR5cGUo
dGFza1B0cik+Ojp0eXBlPiB0YXNrKHRhc2tQdHIpOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFz
ayhjb250ZXh0KTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlwZW5hbWUg
TVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5hbWUgTVAz
LCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0PgotU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
ayBjcmVhdGVDYWxsYmFja1Rhc2soCi0gICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCksCi0gICAgY29uc3QgUDEmIHBhcmFtZXRlcjEs
IGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25zdCBQMyYgcGFyYW1ldGVyMywgY29uc3QgUDQmIHBh
cmFtZXRlcjQpCi17Ci0gICAgYXV0byB0YXNrUHRyID0gbmV3IENyb3NzVGhyZWFkVGFzazQ8dHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46
OlR5cGUsIE1QMywKLSAgICAgICAgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDQ+OjpUeXBl
LCBNUDQ+KAotICAgICAgICAgICAgbWV0aG9kLAotICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEpLCBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFy
YW1ldGVyMiksCi0gICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1l
dGVyMyksIENyb3NzVGhyZWFkQ29waWVyPFA0Pjo6Y29weShwYXJhbWV0ZXI0KSk7Ci0gICAgcmV0
dXJuIFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkgewotICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8dHlwZW5hbWUgc3RkOjpyZW1vdmVfcG9pbnRlcjxkZWNsdHlwZSh0YXNrUHRy
KT46OnR5cGU+IHRhc2sodGFza1B0cik7Ci0gICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKGNvbnRl
eHQpOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5
cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVu
YW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1lIFA1LCB0eXBlbmFtZSBNUDU+Ci1TY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIGNyZWF0ZUNhbGxiYWNrVGFzaygKLSAgICB2b2lkICgqbWV0
aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUpLAot
ICAgIGNvbnN0IFAxJiBwYXJhbWV0ZXIxLCBjb25zdCBQMiYgcGFyYW1ldGVyMiwgY29uc3QgUDMm
IHBhcmFtZXRlcjMsIGNvbnN0IFA0JiBwYXJhbWV0ZXI0LCBjb25zdCBQNSYgcGFyYW1ldGVyNSkK
LXsKLSAgICBhdXRvIHRhc2tQdHIgPSBuZXcgQ3Jvc3NUaHJlYWRUYXNrNTx0eXBlbmFtZSBDcm9z
c1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAz
LAotICAgICAgICB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBNUDU+KAotICAgICAgICAgICAgbWV0
aG9kLAotICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5KHBhcmFtZXRlcjEp
LCBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCi0gICAgICAgICAgICBD
cm9zc1RocmVhZENvcGllcjxQMz46OmNvcHkocGFyYW1ldGVyMyksIENyb3NzVGhyZWFkQ29waWVy
PFA0Pjo6Y29weShwYXJhbWV0ZXI0KSwKLSAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFA1
Pjo6Y29weShwYXJhbWV0ZXI1KSk7Ci0gICAgcmV0dXJuIFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCkgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dHlwZW5hbWUgc3RkOjpy
ZW1vdmVfcG9pbnRlcjxkZWNsdHlwZSh0YXNrUHRyKT46OnR5cGU+IHRhc2sodGFza1B0cik7Ci0g
ICAgICAgIHRhc2stPnBlcmZvcm1UYXNrKGNvbnRleHQpOwotICAgIH07Ci19Ci0KLXRlbXBsYXRl
PHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5
cGVuYW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVu
YW1lIFA1LCB0eXBlbmFtZSBNUDUsIHR5cGVuYW1lIFA2LCB0eXBlbmFtZSBNUDY+Ci1TY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrIGNyZWF0ZUNhbGxiYWNrVGFzaygKLSAgICB2b2lkICgqbWV0
aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAxLCBNUDIsIE1QMywgTVA0LCBNUDUsIE1Q
NiksCi0gICAgY29uc3QgUDEmIHBhcmFtZXRlcjEsIGNvbnN0IFAyJiBwYXJhbWV0ZXIyLCBjb25z
dCBQMyYgcGFyYW1ldGVyMywgY29uc3QgUDQmIHBhcmFtZXRlcjQsIGNvbnN0IFA1JiBwYXJhbWV0
ZXI1LCBjb25zdCBQNiYgcGFyYW1ldGVyNikKLXsKLSAgICBhdXRvIHRhc2tQdHIgPSBuZXcgQ3Jv
c3NUaHJlYWRUYXNrNjx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwg
dHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3Nz
VGhyZWFkQ29waWVyPFAzPjo6VHlwZSwgTVAzLAotICAgICAgICB0eXBlbmFtZSBDcm9zc1RocmVh
ZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpU
eXBlLCBNUDUsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA2Pjo6VHlwZSwgTVA2PigKLSAg
ICAgICAgICAgIG1ldGhvZCwKLSAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAxPjo6Y29w
eShwYXJhbWV0ZXIxKSwgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+Ojpjb3B5KHBhcmFtZXRlcjIpLAot
ICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDM+Ojpjb3B5KHBhcmFtZXRlcjMpLCBDcm9z
c1RocmVhZENvcGllcjxQND46OmNvcHkocGFyYW1ldGVyNCksCi0gICAgICAgICAgICBDcm9zc1Ro
cmVhZENvcGllcjxQNT46OmNvcHkocGFyYW1ldGVyNSksIENyb3NzVGhyZWFkQ29waWVyPFA2Pjo6
Y29weShwYXJhbWV0ZXI2KSk7Ci0gICAgcmV0dXJuIFs9XSAoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCkgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dHlwZW5hbWUgc3RkOjpyZW1v
dmVfcG9pbnRlcjxkZWNsdHlwZSh0YXNrUHRyKT46OnR5cGU+IHRhc2sodGFza1B0cik7Ci0gICAg
ICAgIHRhc2stPnBlcmZvcm1UYXNrKGNvbnRleHQpOwotICAgIH07Ci19Ci0KLXRlbXBsYXRlPHR5
cGVuYW1lIFAxLCB0eXBlbmFtZSBNUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBNUDIsIHR5cGVu
YW1lIFAzLCB0eXBlbmFtZSBNUDMsIHR5cGVuYW1lIFA0LCB0eXBlbmFtZSBNUDQsIHR5cGVuYW1l
IFA1LCB0eXBlbmFtZSBNUDUsIHR5cGVuYW1lIFA2LCB0eXBlbmFtZSBNUDYsIHR5cGVuYW1lIFA3
LCB0eXBlbmFtZSBNUDc+Ci1TY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIGNyZWF0ZUNhbGxi
YWNrVGFzaygKLSAgICB2b2lkICgqbWV0aG9kKShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTVAx
LCBNUDIsIE1QMywgTVA0LCBNUDUsIE1QNiwgTVA3KSwKLSAgICBjb25zdCBQMSYgcGFyYW1ldGVy
MSwgY29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJhbWV0ZXIzLCBjb25zdCBQNCYg
cGFyYW1ldGVyNCwgY29uc3QgUDUmIHBhcmFtZXRlcjUsIGNvbnN0IFA2JiBwYXJhbWV0ZXI2LCBj
b25zdCBQNyYgcGFyYW1ldGVyNykKLXsKLSAgICBhdXRvIHRhc2tQdHIgPSBuZXcgQ3Jvc3NUaHJl
YWRUYXNrNzx0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMT46OlR5cGUsIE1QMSwgdHlwZW5h
bWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDI+OjpUeXBlLCBNUDIsIHR5cGVuYW1lIENyb3NzVGhyZWFk
Q29waWVyPFAzPjo6VHlwZSwgTVAzLAotICAgICAgICB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGll
cjxQND46OlR5cGUsIE1QNCwgdHlwZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBN
UDUsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVyPFA2Pjo6VHlwZSwgTVA2LAotICAgICAgICB0
eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQNz46OlR5cGUsIE1QNz4oCi0gICAgICAgICAgICBt
ZXRob2QsCi0gICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQMT46OmNvcHkocGFyYW1ldGVy
MSksIENyb3NzVGhyZWFkQ29waWVyPFAyPjo6Y29weShwYXJhbWV0ZXIyKSwKLSAgICAgICAgICAg
IENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwgQ3Jvc3NUaHJlYWRDb3Bp
ZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAotICAgICAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8
UDU+Ojpjb3B5KHBhcmFtZXRlcjUpLCBDcm9zc1RocmVhZENvcGllcjxQNj46OmNvcHkocGFyYW1l
dGVyNiksCi0gICAgICAgICAgICBDcm9zc1RocmVhZENvcGllcjxQNz46OmNvcHkocGFyYW1ldGVy
NykpOwotICAgIHJldHVybiBbPV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIHsK
LSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8ZGVj
bHR5cGUodGFza1B0cik+Ojp0eXBlPiB0YXNrKHRhc2tQdHIpOwotICAgICAgICB0YXNrLT5wZXJm
b3JtVGFzayhjb250ZXh0KTsKLSAgICB9OwotfQotCi10ZW1wbGF0ZTx0eXBlbmFtZSBQMSwgdHlw
ZW5hbWUgTVAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgTVAyLCB0eXBlbmFtZSBQMywgdHlwZW5h
bWUgTVAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgTVA0LCB0eXBlbmFtZSBQNSwgdHlwZW5hbWUg
TVA1LCB0eXBlbmFtZSBQNiwgdHlwZW5hbWUgTVA2LCB0eXBlbmFtZSBQNywgdHlwZW5hbWUgTVA3
LCB0eXBlbmFtZSBQOCwgdHlwZW5hbWUgTVA4PgotU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
ayBjcmVhdGVDYWxsYmFja1Rhc2soCi0gICAgdm9pZCAoKm1ldGhvZCkoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIE1QMSwgTVAyLCBNUDMsIE1QNCwgTVA1LCBNUDYsIE1QNywgTVA4KSwKLSAgICBj
b25zdCBQMSYgcGFyYW1ldGVyMSwgY29uc3QgUDImIHBhcmFtZXRlcjIsIGNvbnN0IFAzJiBwYXJh
bWV0ZXIzLCBjb25zdCBQNCYgcGFyYW1ldGVyNCwgY29uc3QgUDUmIHBhcmFtZXRlcjUsIGNvbnN0
IFA2JiBwYXJhbWV0ZXI2LCBjb25zdCBQNyYgcGFyYW1ldGVyNywgY29uc3QgUDgmIHBhcmFtZXRl
cjgpCi17Ci0gICAgYXV0byB0YXNrUHRyID0gbmV3IENyb3NzVGhyZWFkVGFzazg8dHlwZW5hbWUg
Q3Jvc3NUaHJlYWRDb3BpZXI8UDE+OjpUeXBlLCBNUDEsIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29w
aWVyPFAyPjo6VHlwZSwgTVAyLCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQMz46OlR5cGUs
IE1QMywKLSAgICB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQND46OlR5cGUsIE1QNCwgdHlw
ZW5hbWUgQ3Jvc3NUaHJlYWRDb3BpZXI8UDU+OjpUeXBlLCBNUDUsIHR5cGVuYW1lIENyb3NzVGhy
ZWFkQ29waWVyPFA2Pjo6VHlwZSwgTVA2LAotICAgIHR5cGVuYW1lIENyb3NzVGhyZWFkQ29waWVy
PFA3Pjo6VHlwZSwgTVA3LCB0eXBlbmFtZSBDcm9zc1RocmVhZENvcGllcjxQOD46OlR5cGUsIE1Q
OD4oCi0gICAgICAgIG1ldGhvZCwKLSAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDE+Ojpjb3B5
KHBhcmFtZXRlcjEpLCBDcm9zc1RocmVhZENvcGllcjxQMj46OmNvcHkocGFyYW1ldGVyMiksCi0g
ICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFAzPjo6Y29weShwYXJhbWV0ZXIzKSwgQ3Jvc3NUaHJl
YWRDb3BpZXI8UDQ+Ojpjb3B5KHBhcmFtZXRlcjQpLAotICAgICAgICBDcm9zc1RocmVhZENvcGll
cjxQNT46OmNvcHkocGFyYW1ldGVyNSksIENyb3NzVGhyZWFkQ29waWVyPFA2Pjo6Y29weShwYXJh
bWV0ZXI2KSwKLSAgICAgICAgQ3Jvc3NUaHJlYWRDb3BpZXI8UDc+Ojpjb3B5KHBhcmFtZXRlcjcp
LCBDcm9zc1RocmVhZENvcGllcjxQOD46OmNvcHkocGFyYW1ldGVyOCkpOwotICAgIHJldHVybiBb
PV0gKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIHsKLSAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPHR5cGVuYW1lIHN0ZDo6cmVtb3ZlX3BvaW50ZXI8ZGVjbHR5cGUodGFza1B0cik+Ojp0
eXBlPiB0YXNrKHRhc2tQdHIpOwotICAgICAgICB0YXNrLT5wZXJmb3JtVGFzayhjb250ZXh0KTsK
LSAgICB9OwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBDcm9zc1Ro
cmVhZFRhc2tfaApJbmRleDogU291cmNlL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCShyZXZp
c2lvbiAxNjg2MTYpCisrKyBTb3VyY2UvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjAsOCArMTYwLDcgQEAgdm9pZCBGaWxlUmVhZGVyOjphYm9ydCgp
CiAgICAgbV9hYm9ydGluZyA9IHRydWU7CiAKICAgICAvLyBTY2hlZHVsZSB0byBoYXZlIHRoZSBh
Ym9ydCBkb25lIGxhdGVyIHNpbmNlIGFib3J0KCkgbWlnaHQgYmUgY2FsbGVkIGZyb20gdGhlIGV2
ZW50IGhhbmRsZXIgYW5kIHdlIGRvIG5vdCB3YW50IHRoZSByZXNvdXJjZSBsb2FkaW5nIGNvZGUg
dG8gYmUgaW4gdGhlIHN0YWNrLgotICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRh
c2soCi0gICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmZGVsYXllZEFib3J0LCBBbGxvd0FjY2Vz
c0xhdGVyKHRoaXMpKSk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhD
cm9zc1RocmVhZFRhc2soJmRlbGF5ZWRBYm9ydCwgQWxsb3dBY2Nlc3NMYXRlcih0aGlzKSkpOwog
fQogCiB2b2lkIEZpbGVSZWFkZXI6OmRvQWJvcnQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9hZGVyLmNwcAkocmV2aXNpb24gMTY4NjE2KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFibGVMb2FkZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MSw5ICs5MSw3IEBAIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5U
aHJlYWRCcmlkZ2UKICAgICAsIG1fdGFza01vZGUodGFza01vZGUuaXNvbGF0ZWRDb3B5KCkpCiB7
CiAgICAgQVNTRVJUKG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSk7Ci0gICAgbV9sb2FkZXJQ
cm94eS5wb3N0VGFza1RvTG9hZGVyKAotICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5U
aHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSwgcmVxdWVzdCwgb3B0aW9ucywg
b3V0Z29pbmdSZWZlcnJlcikpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihD
cm9zc1RocmVhZFRhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVMb2FkZXIs
IEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcyksIHJlcXVlc3QsIG9wdGlvbnMsIG91dGdvaW5n
UmVmZXJyZXIpKTsKIH0KIAogV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEJyaWRn
ZTo6fk1haW5UaHJlYWRCcmlkZ2UoKQpAQCAtMTI3LDggKzEyNSw3IEBAIHZvaWQgV29ya2VyVGhy
ZWFkYWJsZUxvYWRlcjo6TWFpblRocmVhZEIKICAgICBjbGVhckNsaWVudFdyYXBwZXIoKTsKIAog
ICAgIC8vICJkZWxldGUgdGhpcyIgYW5kIG1fbWFpblRocmVhZExvYWRlcjo6ZGVyZWYoKSBvbiB0
aGUgd29ya2VyIG9iamVjdCdzIHRocmVhZC4KLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9M
b2FkZXIoCi0gICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmTWFpblRocmVhZEJyaWRnZTo6bWFp
blRocmVhZERlc3Ryb3ksIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKKyAgICBtX2xv
YWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NUaHJlYWRUYXNrKCZNYWluVGhyZWFkQnJp
ZGdlOjptYWluVGhyZWFkRGVzdHJveSwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwog
fQogCiB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6Om1haW5U
aHJlYWRDYW5jZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWFpblRocmVhZEJy
aWRnZSogdGhpc1B0cikKQEAgLTE0NCw4ICsxNDEsNyBAQCB2b2lkIFdvcmtlclRocmVhZGFibGVM
b2FkZXI6Ok1haW5UaHJlYWRCCiAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6TWFpblRo
cmVhZEJyaWRnZTo6Y2FuY2VsKCkKIHsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2Fk
ZXIoCi0gICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmTWFpblRocmVhZEJyaWRnZTo6bWFpblRo
cmVhZENhbmNlbCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOworICAgIG1fbG9hZGVy
UHJveHkucG9zdFRhc2tUb0xvYWRlcihDcm9zc1RocmVhZFRhc2soJk1haW5UaHJlYWRCcmlkZ2U6
Om1haW5UaHJlYWRDYW5jZWwsIEFsbG93Q3Jvc3NUaHJlYWRBY2Nlc3ModGhpcykpKTsKICAgICBU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlciogY2xpZW50V3JhcHBlciA9IG1fd29ya2VyQ2xp
ZW50V3JhcHBlci5nZXQoKTsKICAgICBpZiAoIWNsaWVudFdyYXBwZXItPmRvbmUoKSkgewogICAg
ICAgICAvLyBJZiB0aGUgY2xpZW50IGhhc24ndCByZWFjaGVkIGEgdGVybWluYXRpb24gc3RhdGUs
IHRoZW4gdHJhbnNpdGlvbiBpdCBieSBzZW5kaW5nIGEgY2FuY2VsbGF0aW9uIGVycm9yLgpAQCAt
MTcwLDcgKzE2Niw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkU2VuZERhdGEK
IAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRTZW5k
RGF0YSh1bnNpZ25lZCBsb25nIGxvbmcgYnl0ZXNTZW50LCB1bnNpZ25lZCBsb25nIGxvbmcgdG90
YWxCeXRlc1RvQmVTZW50KQogewotICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9X
b3JrZXJHbG9iYWxTY29wZShjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckdsb2JhbFNjb3BlRGlk
U2VuZERhdGEsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgYnl0ZXNTZW50LCB0b3RhbEJ5dGVzVG9C
ZVNlbnQpLCBtX3Rhc2tNb2RlKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRv
V29ya2VyR2xvYmFsU2NvcGUoQ3Jvc3NUaHJlYWRUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZFNl
bmREYXRhLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGJ5dGVzU2VudCwgdG90YWxCeXRlc1RvQmVT
ZW50KSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlk
UmVjZWl2ZVJlc3BvbnNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxU
aHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBQYXNzT3duUHRyPENyb3NzVGhyZWFkUmVzb3VyY2VSZXNwb25z
ZURhdGE+IHJlc3BvbnNlRGF0YSkKQEAgLTE4Miw3ICsxNzgsNyBAQCBzdGF0aWMgdm9pZCB3b3Jr
ZXJHbG9iYWxTY29wZURpZFJlY2VpdmVSCiAKIHZvaWQgV29ya2VyVGhyZWFkYWJsZUxvYWRlcjo6
TWFpblRocmVhZEJyaWRnZTo6ZGlkUmVjZWl2ZVJlc3BvbnNlKHVuc2lnbmVkIGxvbmcgaWRlbnRp
ZmllciwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7Ci0gICAgbV9sb2FkZXJQ
cm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFz
aygmd29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlUmVzcG9uc2UsIG1fd29ya2VyQ2xpZW50V3Jh
cHBlciwgaWRlbnRpZmllciwgcmVzcG9uc2UpLCBtX3Rhc2tNb2RlKTsKKyAgICBtX2xvYWRlclBy
b3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xvYmFsU2NvcGUoQ3Jvc3NUaHJlYWRUYXNrKCZ3
b3JrZXJHbG9iYWxTY29wZURpZFJlY2VpdmVSZXNwb25zZSwgbV93b3JrZXJDbGllbnRXcmFwcGVy
LCBpZGVudGlmaWVyLCByZXNwb25zZSksIG1fdGFza01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3
b3JrZXJHbG9iYWxTY29wZURpZFJlY2VpdmVEYXRhKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50
V3JhcHBlciwgUGFzc093blB0cjxWZWN0b3I8Y2hhcj4+IHZlY3RvckRhdGEpCkBAIC0xOTMsOSAr
MTg5LDkgQEAgc3RhdGljIHZvaWQgd29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlRAogCiB2b2lk
IFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZFJlY2VpdmVEYXRh
KGNvbnN0IGNoYXIqIGRhdGEsIGludCBkYXRhTGVuZ3RoKQogewotICAgIE93blB0cjxWZWN0b3I8
Y2hhcj4+IHZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8Y2hhcj4oZGF0YUxlbmd0aCkpOyAv
LyBuZWVkcyB0byBiZSBhbiBPd25QdHIgZm9yIHVzYWdlIHdpdGggY3JlYXRlQ2FsbGJhY2tUYXNr
LgorICAgIE93blB0cjxWZWN0b3I8Y2hhcj4+IHZlY3RvciA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8
Y2hhcj4oZGF0YUxlbmd0aCkpOyAvLyBuZWVkcyB0byBiZSBhbiBPd25QdHIgZm9yIHVzYWdlIHdp
dGggQ3Jvc3NUaHJlYWRUYXNrLgogICAgIG1lbWNweSh2ZWN0b3ItPmRhdGEoKSwgZGF0YSwgZGF0
YUxlbmd0aCk7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2Jh
bFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlRGF0
YSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCB2ZWN0b3IucmVsZWFzZSgpKSwgbV90YXNrTW9kZSk7
CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENy
b3NzVGhyZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRSZWNlaXZlRGF0YSwgbV93b3JrZXJD
bGllbnRXcmFwcGVyLCB2ZWN0b3IucmVsZWFzZSgpKSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRp
YyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkRmluaXNoTG9hZGluZyhTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdyYXBwZXI+IHdv
cmtlckNsaWVudFdyYXBwZXIsIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgZG91YmxlIGZpbmlz
aFRpbWUpCkBAIC0yMDYsNyArMjAyLDcgQEAgc3RhdGljIHZvaWQgd29ya2VyR2xvYmFsU2NvcGVE
aWRGaW5pc2hMbwogCiB2b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlk
Z2U6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBkb3VibGUgZmlu
aXNoVGltZSkKIHsKLSAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyR2xv
YmFsU2NvcGUoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJHbG9iYWxTY29wZURpZEZpbmlzaExv
YWRpbmcsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgaWRlbnRpZmllciwgZmluaXNoVGltZSksIG1f
dGFza01vZGUpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9i
YWxTY29wZShDcm9zc1RocmVhZFRhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkRmluaXNoTG9hZGlu
ZywgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBpZGVudGlmaWVyLCBmaW5pc2hUaW1lKSwgbV90YXNr
TW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkRmFpbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZUxvYWRlckNsaWVudFdy
YXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQpA
QCAtMjE3LDcgKzIxMyw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkRmFpbChT
Y3IKIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9yKQogewotICAgIG1fbG9hZGVyUHJveHkucG9z
dFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxTY29wZShjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtl
ckdsb2JhbFNjb3BlRGlkRmFpbCwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBlcnJvciksIG1fdGFz
a01vZGUpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJHbG9iYWxT
Y29wZShDcm9zc1RocmVhZFRhc2soJndvcmtlckdsb2JhbFNjb3BlRGlkRmFpbCwgbV93b3JrZXJD
bGllbnRXcmFwcGVyLCBlcnJvciksIG1fdGFza01vZGUpOwogfQogCiBzdGF0aWMgdm9pZCB3b3Jr
ZXJHbG9iYWxTY29wZURpZEZhaWxBY2Nlc3NDb250cm9sQ2hlY2soU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxUaHJlYWRhYmxlTG9hZGVyQ2xpZW50V3JhcHBlcj4g
d29ya2VyQ2xpZW50V3JhcHBlciwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCkBAIC0yMjgs
NyArMjI0LDcgQEAgc3RhdGljIHZvaWQgd29ya2VyR2xvYmFsU2NvcGVEaWRGYWlsQWNjZQogCiB2
b2lkIFdvcmtlclRocmVhZGFibGVMb2FkZXI6Ok1haW5UaHJlYWRCcmlkZ2U6OmRpZEZhaWxBY2Nl
c3NDb250cm9sQ2hlY2soY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgbV9sb2Fk
ZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNr
VGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRGYWlsQWNjZXNzQ29udHJvbENoZWNrLCBtX3dvcmtl
ckNsaWVudFdyYXBwZXIsIGVycm9yKSwgbV90YXNrTW9kZSk7CisgICAgbV9sb2FkZXJQcm94eS5w
b3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3BlKENyb3NzVGhyZWFkVGFzaygmd29ya2Vy
R2xvYmFsU2NvcGVEaWRGYWlsQWNjZXNzQ29udHJvbENoZWNrLCBtX3dvcmtlckNsaWVudFdyYXBw
ZXIsIGVycm9yKSwgbV90YXNrTW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNj
b3BlRGlkRmFpbFJlZGlyZWN0Q2hlY2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UmVmUHRyPFRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVy
KQpAQCAtMjM5LDcgKzIzNSw3IEBAIHN0YXRpYyB2b2lkIHdvcmtlckdsb2JhbFNjb3BlRGlkRmFp
bFJlZGkKIAogdm9pZCBXb3JrZXJUaHJlYWRhYmxlTG9hZGVyOjpNYWluVGhyZWFkQnJpZGdlOjpk
aWRGYWlsUmVkaXJlY3RDaGVjaygpCiB7Ci0gICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1v
ZGVUb1dvcmtlckdsb2JhbFNjb3BlKGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyR2xvYmFsU2Nv
cGVEaWRGYWlsUmVkaXJlY3RDaGVjaywgbV93b3JrZXJDbGllbnRXcmFwcGVyKSwgbV90YXNrTW9k
ZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckdsb2JhbFNjb3Bl
KENyb3NzVGhyZWFkVGFzaygmd29ya2VyR2xvYmFsU2NvcGVEaWRGYWlsUmVkaXJlY3RDaGVjaywg
bV93b3JrZXJDbGllbnRXcmFwcGVyKSwgbV90YXNrTW9kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9Xb3JrZXJUaHJlYWRhYmxlTG9h
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL1dvcmtlclRocmVhZGFi
bGVMb2FkZXIuaAkocmV2aXNpb24gMTY4NjE2KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL1dv
cmtlclRocmVhZGFibGVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNyArOTEsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vICAgIFRoZSBUaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50V3JhcHBlciBoYXMgdGhlIHVuZGVybHlpbmcgY2xpZW50IGNsZWFyZWQsIHNvIG5vIG1vcmUg
Y2FsbHMKICAgICAgICAgLy8gICAgZ28gdGhyb3VnaCBpdC4gIEFsbCB0YXNrcyBwb3N0ZWQgZnJv
bSB0aGUgd29ya2VyIG9iamVjdCdzIHRocmVhZCB0byB0aGUgd29ya2VyIGNvbnRleHQncwogICAg
ICAgICAvLyAgICB0aHJlYWQgZG8gIlRocmVhZGFibGVMb2FkZXJDbGllbnRXcmFwcGVyOjpyZWYi
IChhdXRvbWF0aWNhbGx5IGluc2lkZSBvZiB0aGUgY3Jvc3MgdGhyZWFkIGNvcHkKLSAgICAgICAg
Ly8gICAgZG9uZSBpbiBjcmVhdGVDYWxsYmFja1Rhc2spLCBzbyB0aGUgVGhyZWFkYWJsZUxvYWRl
ckNsaWVudFdyYXBwZXIgaW5zdGFuY2UgaXMgdGhlcmUgdW50aWwgYWxsCisgICAgICAgIC8vICAg
IGRvbmUgaW4gQ3Jvc3NUaHJlYWRUYXNrKSwgc28gdGhlIFRocmVhZGFibGVMb2FkZXJDbGllbnRX
cmFwcGVyIGluc3RhbmNlIGlzIHRoZXJlIHVudGlsIGFsbAogICAgICAgICAvLyAgICB0YXNrcyBh
cmUgZXhlY3V0ZWQuCiAgICAgICAgIGNsYXNzIE1haW5UaHJlYWRCcmlkZ2UgOiBwdWJsaWMgVGhy
ZWFkYWJsZUxvYWRlckNsaWVudCB7CiAgICAgICAgIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9NZW1vcnlDYWNoZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAkocmV2aXNpb24gMTY4NjE2KQorKysg
U291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL01lbW9yeUNhY2hlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODQ3LDcgKzg0Nyw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVVybEZyb21DYWNo
ZShTY3IKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tQ2FjaGUoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBT
ZXNzaW9uSUQgc2Vzc2lvbklEKQogewogICAgIGlmIChjb250ZXh0LT5pc1dvcmtlckdsb2JhbFNj
b3BlKCkpIHsKLSAgICAgICAgdG9Xb3JrZXJHbG9iYWxTY29wZShjb250ZXh0KS0+dGhyZWFkKCku
d29ya2VyTG9hZGVyUHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygm
Y3Jvc3NUaHJlYWRSZW1vdmVSZXF1ZXN0RnJvbUNhY2hlLCByZXF1ZXN0LCBzZXNzaW9uSUQpKTsK
KyAgICAgICAgdG9Xb3JrZXJHbG9iYWxTY29wZShjb250ZXh0KS0+dGhyZWFkKCkud29ya2VyTG9h
ZGVyUHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKENyb3NzVGhyZWFkVGFzaygmY3Jvc3NUaHJlYWRS
ZW1vdmVSZXF1ZXN0RnJvbUNhY2hlLCByZXF1ZXN0LCBzZXNzaW9uSUQpKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtODYzLDcgKzg2Myw3IEBAIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92
ZVJlcXVlc3RGcm9tQ2FjaGUKIHZvaWQgTWVtb3J5Q2FjaGU6OnJlbW92ZVJlcXVlc3RGcm9tU2Vz
c2lvbkNhY2hlcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgaWYgKGNvbnRleHQtPmlzV29ya2VyR2xvYmFsU2Nv
cGUoKSkgewotICAgICAgICB0b1dvcmtlckdsb2JhbFNjb3BlKGNvbnRleHQpLT50aHJlYWQoKS53
b3JrZXJMb2FkZXJQcm94eSgpLnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZj
cm9zc1RocmVhZFJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hlcywgcmVxdWVzdCkpOworICAg
ICAgICB0b1dvcmtlckdsb2JhbFNjb3BlKGNvbnRleHQpLT50aHJlYWQoKS53b3JrZXJMb2FkZXJQ
cm94eSgpLnBvc3RUYXNrVG9Mb2FkZXIoQ3Jvc3NUaHJlYWRUYXNrKCZjcm9zc1RocmVhZFJlbW92
ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hlcywgcmVxdWVzdCkpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIHJlbW92ZVJlcXVlc3RGcm9tU2Vzc2lvbkNhY2hlc0ltcGwoY29udGV4dCwgcmVx
dWVzdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZmF1bHRTaGFyZWRXb3JrZXJS
ZXBvc2l0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS93b3JrZXJzL0RlZmF1
bHRTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmNwcAkocmV2aXNpb24gMTY4NjE2KQorKysgU291cmNl
L1dlYkNvcmUvd29ya2Vycy9EZWZhdWx0U2hhcmVkV29ya2VyUmVwb3NpdG9yeS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE4Niw4ICsxODYsOCBAQCBzdGF0aWMgdm9pZCBwb3N0RXhjZXB0aW9uVGFz
ayhTY3JpcHRFeGVjCiB2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0RXhjZXB0aW9uVG9Xb3Jr
ZXJPYmplY3QoY29uc3QgU3RyaW5nJiBlcnJvck1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQg
Y29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICAgICBNdXRleExvY2tl
ciBsb2NrKG1fd29ya2VyRG9jdW1lbnRzTG9jayk7Ci0gICAgZm9yIChIYXNoU2V0PERvY3VtZW50
Kj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3dvcmtlckRvY3VtZW50cy5iZWdpbigpOyBpdGVyICE9IG1f
d29ya2VyRG9jdW1lbnRzLmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnBvc3RUYXNr
KGNyZWF0ZUNhbGxiYWNrVGFzaygmcG9zdEV4Y2VwdGlvblRhc2ssIGVycm9yTWVzc2FnZSwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBzb3VyY2VVUkwpKTsKKyAgICBmb3IgKGF1dG8mIGRvY3Vt
ZW50IDogbV93b3JrZXJEb2N1bWVudHMpCisgICAgICAgIGRvY3VtZW50LT5wb3N0VGFzayhDcm9z
c1RocmVhZFRhc2soJnBvc3RFeGNlcHRpb25UYXNrLCBlcnJvck1lc3NhZ2UsIGxpbmVOdW1iZXIs
IGNvbHVtbk51bWJlciwgc291cmNlVVJMKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHBvc3RDb25zb2xl
TWVzc2FnZVRhc2soU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogZG9jdW1lbnQsIE1lc3NhZ2VTb3Vy
Y2Ugc291cmNlLCBNZXNzYWdlTGV2ZWwgbGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwsIHVuc2lnbmVkIGxpbmVOdW1iZXIsIHVuc2lnbmVkIGNvbHVt
bk51bWJlcikKQEAgLTE5OCw4ICsxOTgsOCBAQCBzdGF0aWMgdm9pZCBwb3N0Q29uc29sZU1lc3Nh
Z2VUYXNrKFNjcmlwCiB2b2lkIFNoYXJlZFdvcmtlclByb3h5Ojpwb3N0Q29uc29sZU1lc3NhZ2VU
b1dvcmtlck9iamVjdChNZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZVVSTCkKIHsKICAgICBNdXRleExvY2tlciBsb2NrKG1fd29ya2Vy
RG9jdW1lbnRzTG9jayk7Ci0gICAgZm9yIChIYXNoU2V0PERvY3VtZW50Kj46Oml0ZXJhdG9yIGl0
ZXIgPSBtX3dvcmtlckRvY3VtZW50cy5iZWdpbigpOyBpdGVyICE9IG1fd29ya2VyRG9jdW1lbnRz
LmVuZCgpOyArK2l0ZXIpCi0gICAgICAgICgqaXRlciktPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNr
VGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFzaywgc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgc291
cmNlVVJMLCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpKTsKKyAgICBmb3IgKGF1dG8mIGRvY3Vt
ZW50IDogbV93b3JrZXJEb2N1bWVudHMpCisgICAgICAgIGRvY3VtZW50LT5wb3N0VGFzayhDcm9z
c1RocmVhZFRhc2soJnBvc3RDb25zb2xlTWVzc2FnZVRhc2ssIHNvdXJjZSwgbGV2ZWwsIG1lc3Nh
Z2UsIHNvdXJjZVVSTCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyKSk7CiB9CiAKICNpZiBFTkFC
TEUoSU5TUEVDVE9SKQpJbmRleDogU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJNZXNzYWdp
bmdQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJN
ZXNzYWdpbmdQcm94eS5jcHAJKHJldmlzaW9uIDE2ODYxNikKKysrIFNvdXJjZS9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyTWVzc2FnaW5nUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzIsNyAr
MTcyLDcgQEAgc3RhdGljIHZvaWQgcG9zdENvbnNvbGVNZXNzYWdlVGFzayhTY3JpcAogCiB2b2lk
IFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpwb3N0Q29uc29sZU1lc3NhZ2VUb1dvcmtlck9iamVjdChN
ZXNzYWdlU291cmNlIHNvdXJjZSwgTWVzc2FnZUxldmVsIGxldmVsLCBjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNv
dXJjZVVSTCkKIHsKLSAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNrKGNyZWF0
ZUNhbGxiYWNrVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFzaywgQWxsb3dDcm9zc1RocmVhZEFj
Y2Vzcyh0aGlzKSwgc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyLCBzb3VyY2VVUkwpKTsKKyAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnBvc3RUYXNr
KENyb3NzVGhyZWFkVGFzaygmcG9zdENvbnNvbGVNZXNzYWdlVGFzaywgQWxsb3dDcm9zc1RocmVh
ZEFjY2Vzcyh0aGlzKSwgc291cmNlLCBsZXZlbCwgbWVzc2FnZSwgbGluZU51bWJlciwgY29sdW1u
TnVtYmVyLCBzb3VyY2VVUkwpKTsKIH0KIAogdm9pZCBXb3JrZXJNZXNzYWdpbmdQcm94eTo6d29y
a2VyVGhyZWFkQ3JlYXRlZChQYXNzUmVmUHRyPERlZGljYXRlZFdvcmtlclRocmVhZD4gd29ya2Vy
VGhyZWFkKQpAQCAtMTk2LDcgKzE5Niw3IEBAIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondv
cmtlclRocmVhZEMKIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6Ondvcmtlck9iamVjdERlc3Ry
b3llZCgpCiB7CiAgICAgbV93b3JrZXJPYmplY3QgPSAwOwotICAgIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJPYmplY3REZXN0cm95
ZWRJbnRlcm5hbCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOworICAgIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+cG9zdFRhc2soQ3Jvc3NUaHJlYWRUYXNrKCZ3b3JrZXJPYmplY3RE
ZXN0cm95ZWRJbnRlcm5hbCwgQWxsb3dDcm9zc1RocmVhZEFjY2Vzcyh0aGlzKSkpOwogfQogCiB2
b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpub3RpZnlOZXR3b3JrU3RhdGVDaGFuZ2UoYm9vbCBp
c09ubGluZSkKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFdvcmtlck1lc3NhZ2luZ1Byb3h5Ojpj
b25uZWN0VG9JbnNwCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fcGFnZUluc3BlY3Rv
cik7CiAgICAgbV9wYWdlSW5zcGVjdG9yID0gcGFnZUluc3BlY3RvcjsKLSAgICBtX3dvcmtlclRo
cmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZShjcmVhdGVDYWxsYmFja1Rhc2soY29ubmVj
dFRvV29ya2VyR2xvYmFsU2NvcGVJbnNwZWN0b3JUYXNrLCB0cnVlKSwgV29ya2VyRGVidWdnZXJB
Z2VudDo6ZGVidWdnZXJUYXNrTW9kZSk7CisgICAgbV93b3JrZXJUaHJlYWQtPnJ1bkxvb3AoKS5w
b3N0VGFza0Zvck1vZGUoQ3Jvc3NUaHJlYWRUYXNrKGNvbm5lY3RUb1dvcmtlckdsb2JhbFNjb3Bl
SW5zcGVjdG9yVGFzaywgdHJ1ZSksIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyVGFza01v
ZGUpOwogfQogCiBzdGF0aWMgdm9pZCBkaXNjb25uZWN0RnJvbVdvcmtlckdsb2JhbFNjb3BlSW5z
cGVjdG9yVGFzayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBib29sKQpAQCAtMjQ3
LDcgKzI0Nyw3IEBAIHZvaWQgV29ya2VyTWVzc2FnaW5nUHJveHk6OmRpc2Nvbm5lY3RGcm8KICAg
ICBtX3BhZ2VJbnNwZWN0b3IgPSAwOwogICAgIGlmIChtX2Fza2VkVG9UZXJtaW5hdGUpCiAgICAg
ICAgIHJldHVybjsKLSAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9k
ZShjcmVhdGVDYWxsYmFja1Rhc2soZGlzY29ubmVjdEZyb21Xb3JrZXJHbG9iYWxTY29wZUluc3Bl
Y3RvclRhc2ssIHRydWUpLCBXb3JrZXJEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlclRhc2tNb2RlKTsK
KyAgICBtX3dvcmtlclRocmVhZC0+cnVuTG9vcCgpLnBvc3RUYXNrRm9yTW9kZShDcm9zc1RocmVh
ZFRhc2soZGlzY29ubmVjdEZyb21Xb3JrZXJHbG9iYWxTY29wZUluc3BlY3RvclRhc2ssIHRydWUp
LCBXb3JrZXJEZWJ1Z2dlckFnZW50OjpkZWJ1Z2dlclRhc2tNb2RlKTsKIH0KIAogc3RhdGljIHZv
aWQgZGlzcGF0Y2hPbkluc3BlY3RvckJhY2tlbmRUYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lk
IFdvcmtlck1lc3NhZ2luZ1Byb3h5OjpzZW5kTWVzc2FnZVRvCiB7CiAgICAgaWYgKG1fYXNrZWRU
b1Rlcm1pbmF0ZSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29w
KCkucG9zdFRhc2tGb3JNb2RlKGNyZWF0ZUNhbGxiYWNrVGFzayhkaXNwYXRjaE9uSW5zcGVjdG9y
QmFja2VuZFRhc2ssIFN0cmluZyhtZXNzYWdlKSksIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmRlYnVn
Z2VyVGFza01vZGUpOworICAgIG1fd29ya2VyVGhyZWFkLT5ydW5Mb29wKCkucG9zdFRhc2tGb3JN
b2RlKENyb3NzVGhyZWFkVGFzayhkaXNwYXRjaE9uSW5zcGVjdG9yQmFja2VuZFRhc2ssIFN0cmlu
ZyhtZXNzYWdlKSksIFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmRlYnVnZ2VyVGFza01vZGUpOwogICAg
IFdvcmtlckRlYnVnZ2VyQWdlbnQ6OmludGVycnVwdEFuZERpc3BhdGNoSW5zcGVjdG9yQ29tbWFu
ZHMobV93b3JrZXJUaHJlYWQuZ2V0KCkpOwogfQogI2VuZGlmCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>