<?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>87272</bug_id>
          
          <creation_ts>2012-05-23 10:01:15 -0700</creation_ts>
          <short_desc>Rename StyleSheetInternal to StyleSheetContents</short_desc>
          <delta_ts>2012-05-24 01:55:22 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>631743</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-23 10:01:15 -0700</bug_when>
    <thetext>It is a better name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631752</commentid>
    <comment_count>1</comment_count>
      <attachid>143587</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-23 10:07:40 -0700</bug_when>
    <thetext>Created attachment 143587
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631756</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-23 10:10:37 -0700</bug_when>
    <thetext>Attachment 143587 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/css/CSSParser.h:81:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSParser.cpp:1102:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/css/CSSStyleSheet.cpp:599:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 3 in 39 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631757</commentid>
    <comment_count>3</comment_count>
      <attachid>143587</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-23 10:11:28 -0700</bug_when>
    <thetext>Comment on attachment 143587
patch

r$=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>632523</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-24 01:55:22 -0700</bug_when>
    <thetext>This was http://trac.webkit.org/changeset/118194</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143587</attachid>
            <date>2012-05-23 10:07:40 -0700</date>
            <delta_ts>2012-05-23 10:11:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylesheetcontents.patch</filename>
            <type>text/plain</type>
            <size>82785</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODE5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4MyBAQAorMjAxMi0wNS0yMyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgUmVuYW1lIFN0eWxlU2hlZXRJ
bnRlcm5hbCB0byBTdHlsZVNoZWV0Q29udGVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg3MjcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlIG5hbWUgaXMgbW9yZSBkZXNjcmlwdGl2ZSBhbmQgdGhl
IGNvZGUgcmVhZHMgYmV0dGVyLgorICAgICAgICAKKyAgICAgICAgUGxhaW4gIlN0eWxlU2hlZXQi
IHdvdWxkIGJlIGdvb2QgdG9vIGJ1dCB0aGF0IGlzIGEgQ1NTT00gdHlwZSBhbmQgdGhlIG5hbWUg
Y2FuJ3QgYmUgdXNlZCB3aXRob3V0CisgICAgICAgIGNoYW5naW5nIGlkbCBjb2RlIGdlbmVyYXRp
b24gYW5kIHJlc29sdmluZyBidW5jaCBvZiBvdGhlciBpc3N1ZXMuCisKKyAgICAgICAgKiBjc3Mv
Q1NTRm9udEZhY2VTcmNWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVNy
Y1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICogY3NzL0NTU0ZvbnRG
YWNlU3JjVmFsdWUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlU3JjVmFsdWUpOgorICAgICAgICAq
IGNzcy9DU1NJbXBvcnRSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9y
dDo6c2V0Q1NTU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6
OnJlcXVlc3RTdHlsZVNoZWV0KToKKyAgICAgICAgKiBjc3MvQ1NTSW1wb3J0UnVsZS5oOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6OnBhcmVu
dFN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlSW1wb3J0OjpzZXRQYXJl
bnRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6c3R5bGVT
aGVldCk6CisgICAgICAgIChTdHlsZVJ1bGVJbXBvcnQpOgorICAgICAgICAqIGNzcy9DU1NNZWRp
YVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWVkaWFSdWxlOjppbnNlcnRSdWxlKToK
KyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlUnVsZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlS2V5ZnJhbWVSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpw
YXJzZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6c2V0U3R5bGVT
aGVldCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmxvd1RocmVhZCk6Cisg
ICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChD
U1NQYXJzZXIpOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZTo6YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMpOgor
ICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5oOgorICAgICAgICAoQ1NTUHJpbWl0aXZl
VmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NSZWZsZWN0VmFsdWUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAg
ICogY3NzL0NTU1JlZmxlY3RWYWx1ZS5oOgorICAgICAgICAoQ1NTUmVmbGVjdFZhbHVlKToKKyAg
ICAgICAgKiBjc3MvQ1NTUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NSdWxlOjpwYXJz
ZXJDb250ZXh0KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OmVzdGltYXRlZFNpemVJbkJ5dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6U3R5bGVTaGVldENvbnRlbnRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6flN0eWxlU2hlZXRDb250ZW50cyk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OmlzQ2FjaGVhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyQXBwZW5kUnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OnJ1bGVBdCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OnJ1bGVDb3VudCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVNoZWV0Q29udGVudHM6OmNsZWFyQ2hhcnNldFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldENvbnRlbnRzOjpjbGVhclJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlU2hlZXRDb250ZW50czo6cGFyc2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVySW5zZXJ0UnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OndyYXBwZXJEZWxldGVSdWxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyQWRkTmFtZXNwYWNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6ZGV0ZXJtaW5lTmFtZXNw
YWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VBdXRob3JT
dHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VT
dHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZVN0cmlu
Z0F0TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OmlzTG9hZGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OmNoZWNrTG9hZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6bm90aWZ5TG9hZGVkU2hlZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpzdGFydExvYWRpbmdEeW5h
bWljU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpyb290U3R5
bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OnNpbmdsZU93
bmVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OnNpbmdsZU93
bmVyRG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpjb21w
bGV0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6OmFkZFN1YnJl
c291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6
cGFyZW50U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6
OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6
dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6
OmFkZGVkVG9NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVu
dHM6OnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldDo6Y3JlYXRlSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OkNT
U1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6fkNTU1N0eWxl
U2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6d2lsbE11dGF0ZVJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmRpZE11dGF0ZVJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OnJlYXR0YWNoQ2hpbGRSdWxlQ1NTT01XcmFw
cGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpsZW5ndGgpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNoZWV0OjpydWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjppbnNl
cnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmRlbGV0ZVJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Y3NzUnVsZXMpOgorICAgICAgICAqIGNz
cy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0Q29udGVudHM6
OmNyZWF0ZSk6CisgICAgICAgIChTdHlsZVNoZWV0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldENvbnRlbnRzOjpjb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2hlZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpjb250ZW50
cyk6CisgICAgICAgIChDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTVmFsdWU6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToK
KyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
Q1NTVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NWYWx1ZUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTVmFsdWVMaXN0OjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICog
Y3NzL0NTU1ZhbHVlTGlzdC5oOgorICAgICAgICAoQ1NTVmFsdWVMaXN0KToKKyAgICAgICAgKiBj
c3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29udGV4dFN0eWxlU2hlZXQpOgorICAg
ICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAg
ICAgKiBjc3MvU3R5bGVQcm9wZXJ0eVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVBy
b3BlcnR5U2V0OjpzZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVByb3BlcnR5
U2V0OjpwYXJzZURlY2xhcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUHJvcGVydHlT
ZXQ6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0
eVNldC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChTdHlsZVByb3BlcnR5U2V0KToK
KyAgICAgICAgKiBjc3MvU3R5bGVSZXNvbHZlci5jcHA6CisgICAgICAgIChSdWxlU2V0KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVS
ZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphZGRBdXRob3JSdWxl
c0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlc2hlZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlVUFTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpjb2xsZWN0TWF0
Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9TdHlsZVJlc29sdmVyLmg6CisgICAg
ICAgIChTdHlsZVJlc29sdmVyKToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRS
dWxlKToKKyAgICAgICAgKiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RE9NSW1wbGVtZW50YXRpb246OmNyZWF0ZUNTU1N0eWxlU2hlZXQpOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVjYWxjU3R5
bGUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVwZGF0ZUJhc2VVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBhZ2VVc2VyU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6
RG9jdW1lbnQ6OnBhZ2VHcm91cFVzZXJTaGVldHMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmFkZFVzZXJTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6dGVzdEFkZGVk
U3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OmFuYWx5emVTdHlsZXNoZWV0Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlU2hl
ZXRzVXNlUmVtVW5pdHMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChEb2N1bWVudCk6CisgICAgICAgICogZG9tL0VsZW1lbnRBdHRyaWJ1
dGVEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp1cGRh
dGVJbmxpbmVTdHlsZUF2b2lkaW5nTXV0YXRpb24pOgorICAgICAgICAqIGRvbS9Qcm9jZXNzaW5n
SW5zdHJ1Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc2luZ0luc3RydWN0aW9u
OjpzZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NpbmdJbnN0cnVj
dGlvbjo6cGFyc2VTdHlsZVNoZWV0KToKKyAgICAgICAgKiBkb20vU3R5bGVFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlRWxlbWVudDo6Y3JlYXRlU2hlZXQpOgorICAgICAgICAq
IGRvbS9TdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6
OnNldElubGluZVN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
ZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgICogaHRtbC9I
VE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpz
ZXRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6c3R5
bGVTaGVldElzTG9hZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmFkZFN1YnJlc291
cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbE1lZGlhTGlzdENoYWluKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlOjpzZXRQcm9wZXJ0eVRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFVSTCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Z2V0U3R5bGVBdHRy
aWJ1dGVSYW5nZXMpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OnJlc3RvcmVQYXJz
ZWRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OnNh
dmVQYXJzZWRTdHlsZVNoZWV0KToKKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5
bGVTaGVldC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDYWNoZWRDU1NTdHlsZVNo
ZWV0KToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KToKKwogMjAxMi0wNS0y
MyAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgVXNlIENvbnRhaW5l
ck5vZGUgaW5zdGVhZCBvZiBOb2RlIHdoZXJlIHBvc3NpYmxlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwCShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTczLDcgKzczLDcgQEAgU3RyaW5nIENTU0ZvbnRGYWNlU3JjVmFsdWU6OmN1c3RvbUNzc1RleAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgQ1NTRm9udEZhY2VTcmNWYWx1ZTo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hl
ZXRJbnRlcm5hbCogc3R5bGVTaGVldCkKK3ZvaWQgQ1NTRm9udEZhY2VTcmNWYWx1ZTo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hl
ZXRDb250ZW50cyogc3R5bGVTaGVldCkKIHsKICAgICBpZiAoIWlzTG9jYWwoKSkKICAgICAgICAg
YWRkU3VicmVzb3VyY2VVUkwodXJscywgc3R5bGVTaGVldC0+Y29tcGxldGVVUkwobV9yZXNvdXJj
ZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU3JjVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5oCShyZXZp
c2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTcmNWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBj
dXN0b21Dc3NUZXh0KCkgY29uc3Q7CiAKLSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CisgICAgdm9p
ZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0eWxl
U2hlZXRDb250ZW50cyopOwogCiAgICAgQ2FjaGVkRm9udCogY2FjaGVkRm9udChEb2N1bWVudCop
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuY3BwCShyZXZpc2lvbiAxMTgx
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBTdHlsZVJ1bGVJbXBvcnQ6OnNldENTU1N0eWxlU2hl
ZXQoYwogICAgIGlmICghYmFzZVVSTC5pc051bGwoKSkKICAgICAgICAgY29udGV4dC5iYXNlVVJM
ID0gYmFzZVVSTDsKIAotICAgIG1fc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3Jl
YXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNvbnRleHQpOworICAgIG1fc3R5bGVTaGVldCA9IFN0
eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKHRoaXMsIGhyZWYsIGJhc2VVUkwsIGNvbnRleHQpOwog
CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gbV9wYXJlbnRTdHlsZVNoZWV0ID8gbV9wYXJlbnRT
dHlsZVNoZWV0LT5zaW5nbGVPd25lckRvY3VtZW50KCkgOiAwOwogICAgIG1fc3R5bGVTaGVldC0+
cGFyc2VBdXRob3JTdHlsZVNoZWV0KGNhY2hlZFN0eWxlU2hlZXQsIGRvY3VtZW50ID8gZG9jdW1l
bnQtPnNlY3VyaXR5T3JpZ2luKCkgOiAwKTsKQEAgLTEwNyw4ICsxMDcsOCBAQCB2b2lkIFN0eWxl
UnVsZUltcG9ydDo6cmVxdWVzdFN0eWxlU2hlZXQoCiAKICAgICAvLyBDaGVjayBmb3IgYSBjeWNs
ZSBpbiBvdXIgaW1wb3J0IGNoYWluLiAgSWYgd2UgZW5jb3VudGVyIGEgc3R5bGVzaGVldAogICAg
IC8vIGluIG91ciBwYXJlbnQgY2hhaW4gd2l0aCB0aGUgc2FtZSBVUkwsIHRoZW4ganVzdCBiYWls
LgotICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcm9vdFNoZWV0ID0gbV9wYXJlbnRTdHlsZVNoZWV0
OwotICAgIGZvciAoU3R5bGVTaGVldEludGVybmFsKiBzaGVldCA9IG1fcGFyZW50U3R5bGVTaGVl
dDsgc2hlZXQ7IHNoZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgeworICAgIFN0eWxl
U2hlZXRDb250ZW50cyogcm9vdFNoZWV0ID0gbV9wYXJlbnRTdHlsZVNoZWV0OworICAgIGZvciAo
U3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCA9IG1fcGFyZW50U3R5bGVTaGVldDsgc2hlZXQ7IHNo
ZWV0ID0gc2hlZXQtPnBhcmVudFN0eWxlU2hlZXQoKSkgewogICAgICAgICBpZiAoYWJzSHJlZiA9
PSBzaGVldC0+ZmluYWxVUkwoKS5zdHJpbmcoKSB8fCBhYnNIcmVmID09IHNoZWV0LT5vcmlnaW5h
bFVSTCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICByb290U2hlZXQgPSBzaGVldDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaAkocmV2aXNpb24gMTE4MTg0KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
NyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0
OwogY2xhc3MgTWVkaWFMaXN0OwogY2xhc3MgTWVkaWFRdWVyeVNldDsKLWNsYXNzIFN0eWxlU2hl
ZXRJbnRlcm5hbDsKK2NsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIAogY2xhc3MgU3R5bGVSdWxl
SW1wb3J0IDogcHVibGljIFN0eWxlUnVsZUJhc2UgewogcHVibGljOgpAQCAtNDEsMTIgKzQxLDEy
IEBAIHB1YmxpYzoKIAogICAgIH5TdHlsZVJ1bGVJbXBvcnQoKTsKICAgICAKLSAgICBTdHlsZVNo
ZWV0SW50ZXJuYWwqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0
eWxlU2hlZXQ7IH0KLSAgICB2b2lkIHNldFBhcmVudFN0eWxlU2hlZXQoU3R5bGVTaGVldEludGVy
bmFsKiBzaGVldCkgeyBBU1NFUlQoc2hlZXQpOyBtX3BhcmVudFN0eWxlU2hlZXQgPSBzaGVldDsg
fQorICAgIFN0eWxlU2hlZXRDb250ZW50cyogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFyZW50U3R5bGVTaGVldDsgfQorICAgIHZvaWQgc2V0UGFyZW50U3R5bGVTaGVldChT
dHlsZVNoZWV0Q29udGVudHMqIHNoZWV0KSB7IEFTU0VSVChzaGVldCk7IG1fcGFyZW50U3R5bGVT
aGVldCA9IHNoZWV0OyB9CiAgICAgdm9pZCBjbGVhclBhcmVudFN0eWxlU2hlZXQoKSB7IG1fcGFy
ZW50U3R5bGVTaGVldCA9IDA7IH0KIAogICAgIFN0cmluZyBocmVmKCkgY29uc3QgeyByZXR1cm4g
bV9zdHJIcmVmOyB9Ci0gICAgU3R5bGVTaGVldEludGVybmFsKiBzdHlsZVNoZWV0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHlsZVNoZWV0LmdldCgpOyB9CisgICAgU3R5bGVTaGVldENvbnRlbnRzKiBz
dHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNoZWV0LmdldCgpOyB9CiAKICAgICBi
b29sIGlzTG9hZGluZygpIGNvbnN0OwogICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygp
IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CkBAIC03MywxMiArNzMsMTIgQEAgcHJp
dmF0ZToKIAogICAgIFN0eWxlUnVsZUltcG9ydChjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQ
dHI8TWVkaWFRdWVyeVNldD4pOwogCi0gICAgU3R5bGVTaGVldEludGVybmFsKiBtX3BhcmVudFN0
eWxlU2hlZXQ7CisgICAgU3R5bGVTaGVldENvbnRlbnRzKiBtX3BhcmVudFN0eWxlU2hlZXQ7CiAK
ICAgICBJbXBvcnRlZFN0eWxlU2hlZXRDbGllbnQgbV9zdHlsZVNoZWV0Q2xpZW50OwogICAgIFN0
cmluZyBtX3N0ckhyZWY7CiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFRdWVyaWVz
OwotICAgIFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IG1fc3R5bGVTaGVldDsKKyAgICBSZWZQ
dHI8U3R5bGVTaGVldENvbnRlbnRzPiBtX3N0eWxlU2hlZXQ7CiAgICAgQ2FjaGVkUmVzb3VyY2VI
YW5kbGU8Q2FjaGVkQ1NTU3R5bGVTaGVldD4gbV9jYWNoZWRTaGVldDsKICAgICBib29sIG1fbG9h
ZGluZzsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAkocmV2aXNpb24g
MTE4MTg0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdW5zaWduZWQgQ1NTTWVkaWFSdWxlOjppbnNlcnRSdWxl
KGNvbnN0IAogCiAgICAgQ1NTUGFyc2VyIHBhcnNlcihwYXJzZXJDb250ZXh0KCkpOwogICAgIENT
U1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgUmVmUHRy
PFN0eWxlUnVsZUJhc2U+IG5ld1J1bGUgPSBwYXJzZXIucGFyc2VSdWxlKHN0eWxlU2hlZXQgPyBz
dHlsZVNoZWV0LT5pbnRlcm5hbCgpIDogMCwgcnVsZVN0cmluZyk7CisgICAgUmVmUHRyPFN0eWxl
UnVsZUJhc2U+IG5ld1J1bGUgPSBwYXJzZXIucGFyc2VSdWxlKHN0eWxlU2hlZXQgPyBzdHlsZVNo
ZWV0LT5jb250ZW50cygpIDogMCwgcnVsZVN0cmluZyk7CiAgICAgaWYgKCFuZXdSdWxlKSB7CiAg
ICAgICAgIC8vIFNZTlRBWF9FUlI6IFJhaXNlZCBpZiB0aGUgc3BlY2lmaWVkIHJ1bGUgaGFzIGEg
c3ludGF4IGVycm9yIGFuZCBpcyB1bnBhcnNhYmxlLgogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMTE4MTg0KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMiw3ICsz
MDIsNyBAQCB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciogCiAgICAgcmVz
ZXRSdWxlQm9keU1hcmtzKCk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KFN0eWxl
U2hlZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBpbnQgc3RhcnRMaW5l
TnVtYmVyLCBTdHlsZVJ1bGVSYW5nZU1hcCogcnVsZVJhbmdlTWFwKQordm9pZCBDU1NQYXJzZXI6
OnBhcnNlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGludCBzdGFydExpbmVOdW1iZXIsIFN0eWxlUnVsZVJhbmdlTWFwKiBydWxlUmFuZ2VNYXAp
CiB7CiAgICAgc2V0U3R5bGVTaGVldChzaGVldCk7CiAgICAgbV9kZWZhdWx0TmFtZXNwYWNlID0g
c3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KQEAgLTMyMCw3ICszMjAs
NyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChTdHlsZVNoZWV0SW50CiAgICAgbV9ydWxl
ID0gMDsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OnBhcnNlUnVs
ZShTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK1Bhc3NS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpwYXJzZVJ1bGUoU3R5bGVTaGVldENvbnRl
bnRzKiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgc2V0U3R5bGVTaGVldChz
aGVldCk7CiAgICAgbV9hbGxvd05hbWVzcGFjZURlY2xhcmF0aW9ucyA9IGZhbHNlOwpAQCAtMzI5
LDcgKzMyOSw3IEBAIFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpwYXIKICAg
ICByZXR1cm4gbV9ydWxlLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1l
PiBDU1NQYXJzZXI6OnBhcnNlS2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRJbnRlcm5hbCogc2hlZXQs
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQorUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBDU1NQYXJz
ZXI6OnBhcnNlS2V5ZnJhbWVSdWxlKFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQsIGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogewogICAgIHNldFN0eWxlU2hlZXQoc2hlZXQpOwogICAgIHNldHVwUGFy
c2VyKCJALXdlYmtpdC1rZXlmcmFtZS1ydWxleyAiLCBzdHJpbmcsICJ9ICIpOwpAQCAtOTg4LDcg
Kzk4OCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnMKICAgICBy
ZXR1cm4gc3RhdGljX3BvaW50ZXJfY2FzdDxDU1NWYWx1ZUxpc3Q+KGR1bW15U3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KSk7CiB9CiAKLWJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqIGRlY2xhcmF0aW9uLCBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgQ1NT
UGFyc2VyTW9kZSBjc3NQYXJzZXJNb2RlLCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHls
ZVNoZWV0KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eVNldCogZGVj
bGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGJvb2wgaW1wb3J0YW50LCBDU1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUsIFN0eWxlU2hlZXRD
b250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgQVNTRVJUKCFzdHJpbmcuaXNFbXB0
eSgpKTsKICAgICBpZiAocGFyc2VTaW1wbGVMZW5ndGhWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVy
dHlJRCwgc3RyaW5nLCBpbXBvcnRhbnQsIGNzc1BhcnNlck1vZGUpKQpAQCAtMTAwNyw3ICsxMDA3
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQcm9wZXJ0eQogICAgIHJldHVy
biBwYXJzZXIucGFyc2VWYWx1ZShkZWNsYXJhdGlvbiwgcHJvcGVydHlJRCwgc3RyaW5nLCBpbXBv
cnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0KTsKIH0KIAotYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoU3R5bGVQcm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0SW50ZXJu
YWwqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoU3R5bGVQ
cm9wZXJ0eVNldCogZGVjbGFyYXRpb24sIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRl
eHRTdHlsZVNoZWV0KQogewogICAgIHNldFN0eWxlU2hlZXQoY29udGV4dFN0eWxlU2hlZXQpOwog
CkBAIC0xMDg1LDcgKzEwODUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTeXN0ZW1Db2xvcihS
R0JBMzImCiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKIHsKLSAgICBSZWZQdHI8U3R5bGVT
aGVldEludGVybmFsPiBkdW1teVN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0
ZSgpOworICAgIFJlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IGR1bW15U3R5bGVTaGVldCA9IFN0
eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKCk7CiAgICAgc2V0U3R5bGVTaGVldChkdW1teVN0eWxl
U2hlZXQuZ2V0KCkpOwogICAgIG1fc2VsZWN0b3JMaXN0Rm9yUGFyc2VTZWxlY3RvciA9ICZzZWxl
Y3Rvckxpc3Q7CiAKQEAgLTEwOTksNyArMTA5OSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNl
bGVjdG9yKGNvbnN0IFN0cmkKICAgICBBU1NFUlQoZHVtbXlTdHlsZVNoZWV0LT5oYXNPbmVSZWYo
KSk7CiB9CiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlT
ZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxlU291
cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwgU3R5bGVTaGVldEludGVybmFsKiBjb250ZXh0U3R5
bGVTaGVldCkKK2Jvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlT
ZXQqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVmUHRyPENTU1N0eWxlU291
cmNlRGF0YT4qIHN0eWxlU291cmNlRGF0YSwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5
bGVTaGVldCkKIHsKICAgICAvLyBMZW5ndGggb2YgdGhlICJALXdlYmtpdC1kZWNsc3siIHByZWZp
eC4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgcHJlZml4TGVuZ3RoID0gMTU7CkBAIC0xMjEy
LDcgKzEyMTIsNyBAQCB2b2lkIENTU1BhcnNlcjo6Y2xlYXJQcm9wZXJ0aWVzKCkKICAgICBtX2hh
c0ZvbnRGYWNlT25seVZhbHVlcyA9IGZhbHNlOwogfQogCi12b2lkIENTU1BhcnNlcjo6c2V0U3R5
bGVTaGVldChTdHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQpCit2b2lkIENTU1BhcnNlcjo6
c2V0U3R5bGVTaGVldChTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXQpCiB7CiAgICAgbV9z
dHlsZVNoZWV0ID0gc3R5bGVTaGVldDsKIH0KQEAgLTczMjUsNyArNzMyNSw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpjc3NHcmlkTGF5b3V0RW5hYmxlZCgpIGMKIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNl
Rmxvd1RocmVhZChjb25zdCBTdHJpbmcmIGZsb3dOYW1lKQogewotICAgIFJlZlB0cjxTdHlsZVNo
ZWV0SW50ZXJuYWw+IGR1bW15U3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRl
KCk7CisgICAgUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gZHVtbXlTdHlsZVNoZWV0ID0gU3R5
bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoKTsKICAgICBzZXRTdHlsZVNoZWV0KGR1bW15U3R5bGVT
aGVldC5nZXQoKSk7CiAKICAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtZGVjbHN7LXdlYmtpdC1m
bG93LWludG86IiwgZmxvd05hbWUsICJ9Iik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShy
ZXZpc2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgY2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsK
IGNsYXNzIFN0eWxlUnVsZUJhc2U7CiBjbGFzcyBTdHlsZVJ1bGVLZXlmcmFtZXM7CiBjbGFzcyBT
dHlsZUtleWZyYW1lOwotY2xhc3MgU3R5bGVTaGVldEludGVybmFsOworY2xhc3MgU3R5bGVTaGVl
dENvbnRlbnRzOwogY2xhc3MgU3R5bGVkRWxlbWVudDsKIAogY2xhc3MgQ1NTUGFyc2VyIHsKQEAg
LTcwLDE1ICs3MCwxNSBAQCBwdWJsaWM6CiAKICAgICB+Q1NTUGFyc2VyKCk7CiAKLSAgICB2b2lk
IHBhcnNlU2hlZXQoU3R5bGVTaGVldEludGVybmFsKiwgY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0
TGluZU51bWJlciA9IDAsIFN0eWxlUnVsZVJhbmdlTWFwKiA9IDApOwotICAgIFBhc3NSZWZQdHI8
U3R5bGVSdWxlQmFzZT4gcGFyc2VSdWxlKFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IFN0cmlu
ZyYpOwotICAgIFBhc3NSZWZQdHI8U3R5bGVLZXlmcmFtZT4gcGFyc2VLZXlmcmFtZVJ1bGUoU3R5
bGVTaGVldEludGVybmFsKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VW
YWx1ZShTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUHJvcGVydHlJRCwgY29uc3QgU3RyaW5nJiwgYm9v
bCBpbXBvcnRhbnQsIENTU1BhcnNlck1vZGUsIFN0eWxlU2hlZXRJbnRlcm5hbCopOworICAgIHZv
aWQgcGFyc2VTaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmLCBpbnQgc3Rh
cnRMaW5lTnVtYmVyID0gMCwgU3R5bGVSdWxlUmFuZ2VNYXAqID0gMCk7CisgICAgUGFzc1JlZlB0
cjxTdHlsZVJ1bGVCYXNlPiBwYXJzZVJ1bGUoU3R5bGVTaGVldENvbnRlbnRzKiwgY29uc3QgU3Ry
aW5nJik7CisgICAgUGFzc1JlZlB0cjxTdHlsZUtleWZyYW1lPiBwYXJzZUtleWZyYW1lUnVsZShT
dHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBwYXJz
ZVZhbHVlKFN0eWxlUHJvcGVydHlTZXQqLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBTdHJpbmcmLCBi
b29sIGltcG9ydGFudCwgQ1NTUGFyc2VyTW9kZSwgU3R5bGVTaGVldENvbnRlbnRzKik7CiAgICAg
c3RhdGljIGJvb2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBib29s
IHN0cmljdCA9IGZhbHNlKTsKICAgICBzdGF0aWMgYm9vbCBwYXJzZVN5c3RlbUNvbG9yKFJHQkEz
MiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIERvY3VtZW50Kik7CiAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7
CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VWYWxpZFByaW1pdGl2ZShp
bnQgaWRlbnQsIENTU1BhcnNlclZhbHVlKik7Ci0gICAgYm9vbCBwYXJzZURlY2xhcmF0aW9uKFN0
eWxlUHJvcGVydHlTZXQqLCBjb25zdCBTdHJpbmcmLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRh
PiosIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpOworICAgIGJvb2wgcGFy
c2VEZWNsYXJhdGlvbihTdHlsZVByb3BlcnR5U2V0KiwgY29uc3QgU3RyaW5nJiwgUmVmUHRyPENT
U1N0eWxlU291cmNlRGF0YT4qLCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0
KTsKICAgICBQYXNzT3duUHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJp
bmcmKTsKIAogICAgIHZvaWQgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4sIGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOwpAQCAtMjg4
LDcgKzI4OCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgbV9pbXBvcnRhbnQ7CiAgICAgQ1NTUHJv
cGVydHlJRCBtX2lkOwotICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogbV9zdHlsZVNoZWV0OworICAg
IFN0eWxlU2hlZXRDb250ZW50cyogbV9zdHlsZVNoZWV0OwogICAgIFJlZlB0cjxTdHlsZVJ1bGVC
YXNlPiBtX3J1bGU7CiAgICAgUmVmUHRyPFN0eWxlS2V5ZnJhbWU+IG1fa2V5ZnJhbWU7CiAgICAg
T3duUHRyPE1lZGlhUXVlcnk+IG1fbWVkaWFRdWVyeTsKQEAgLTM0OSw3ICszNDksNyBAQCBwcml2
YXRlOgogICAgIGlubGluZSB2b2lkIGRldGVjdERhc2hUb2tlbihpbnQpOwogICAgIGlubGluZSB2
b2lkIGRldGVjdEF0VG9rZW4oaW50LCBib29sKTsKIAotICAgIHZvaWQgc2V0U3R5bGVTaGVldChT
dHlsZVNoZWV0SW50ZXJuYWwqKTsKKyAgICB2b2lkIHNldFN0eWxlU2hlZXQoU3R5bGVTaGVldENv
bnRlbnRzKik7CiAKICAgICBpbmxpbmUgYm9vbCBpblN0cmljdE1vZGUoKSBjb25zdCB7IHJldHVy
biBtX2NvbnRleHQubW9kZSA9PSBDU1NTdHJpY3RNb2RlIHx8IG1fY29udGV4dC5tb2RlID09IFNW
R0F0dHJpYnV0ZU1vZGU7IH0KICAgICBpbmxpbmUgYm9vbCBpblF1aXJrc01vZGUoKSBjb25zdCB7
IHJldHVybiBtX2NvbnRleHQubW9kZSA9PSBDU1NRdWlya3NNb2RlOyB9CkBAIC0zNjksNyArMzY5
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzR2VuZXJhdGVkSW1hZ2VWYWx1ZShDU1NQYXJzZXJW
YWx1ZSopIGNvbnN0OwogICAgIGJvb2wgcGFyc2VHZW5lcmF0ZWRJbWFnZShDU1NQYXJzZXJWYWx1
ZUxpc3QqLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAKLSAgICBib29sIHBhcnNlVmFsdWUoU3R5bGVQ
cm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50
LCBTdHlsZVNoZWV0SW50ZXJuYWwqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBib29sIHBhcnNl
VmFsdWUoU3R5bGVQcm9wZXJ0eVNldCosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJv
b2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKIAog
ICAgIGVudW0gU2l6ZVBhcmFtZXRlclR5cGUgewogICAgICAgICBOb25lLApJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAxMTgxODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDY0LDcgKzEwNjQsNyBAQCBTdHJpbmcgQ1NTUHJpbWl0aXZlVmFsdWU6OmN1c3RvbUNzc1Rl
eHQoCiAgICAgcmV0dXJuIHRleHQ7CiB9CiAKLXZvaWQgQ1NTUHJpbWl0aXZlVmFsdWU6OmFkZFN1
YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNo
ZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQpCit2b2lkIENTU1ByaW1pdGl2ZVZhbHVlOjphZGRTdWJy
ZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVl
dENvbnRlbnRzKiBzdHlsZVNoZWV0KQogewogICAgIGlmIChtX3ByaW1pdGl2ZVVuaXRUeXBlID09
IENTU19VUkkpCiAgICAgICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIHN0eWxlU2hlZXQtPmNv
bXBsZXRlVVJMKG1fdmFsdWUuc3RyaW5nKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJp
bWl0aXZlVmFsdWUuaAkocmV2aXNpb24gMTE4MTg0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Myw3ICsyODMsNyBAQCBwdWJs
aWM6CiAKICAgICBib29sIGlzUXVpcmtWYWx1ZSgpIHsgcmV0dXJuIG1faXNRdWlya1ZhbHVlOyB9
CiAKLSAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+Jiwg
Y29uc3QgU3R5bGVTaGVldEludGVybmFsKik7CisgICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0eWxlU2hlZXRDb250ZW50cyopOwogCiAg
ICAgTGVuZ3RoIHZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpOwogICAgIApJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1JlZmxlY3RWYWx1ZS5jcHAJKHJldmlzaW9uIDExODE4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NSZWZsZWN0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3
ICs1OSw3IEBAIFN0cmluZyBDU1NSZWZsZWN0VmFsdWU6OmN1c3RvbUNzc1RleHQoKSAKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi12b2lkIENTU1JlZmxlY3RWYWx1ZTo6YWRkU3VicmVzb3VyY2VT
dHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5h
bCogc3R5bGVTaGVldCkKK3ZvaWQgQ1NTUmVmbGVjdFZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxl
VVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldENvbnRlbnRzKiBz
dHlsZVNoZWV0KQogewogICAgIGlmIChtX21hc2spCiAgICAgICAgIG1fbWFzay0+YWRkU3VicmVz
b3VyY2VTdHlsZVVSTHModXJscywgc3R5bGVTaGVldCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUmVmbGVjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1JlZmxlY3RWYWx1ZS5oCShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUmVmbGVjdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGlj
OgogCiAgICAgU3RyaW5nIGN1c3RvbUNzc1RleHQoKSBjb25zdDsKIAotICAgIHZvaWQgYWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25zdCBTdHlsZVNoZWV0SW50
ZXJuYWwqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtV
Ukw+JiwgY29uc3QgU3R5bGVTaGVldENvbnRlbnRzKik7CiAKIHByaXZhdGU6CiAgICAgQ1NTUmVm
bGVjdFZhbHVlKENTU1JlZmxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBQYXNzUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiBvZmZzZXQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IG1hc2spCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1J1bGUuY3BwCShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lk
IENTU1J1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZUJhc2UqIHJ1CiBjb25zdCBDU1NQYXJzZXJDb250
ZXh0JiBDU1NSdWxlOjpwYXJzZXJDb250ZXh0KCkgY29uc3QKIHsKICAgICBDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpOwotICAgIHJldHVybiBzdHlsZVNoZWV0
ID8gc3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+cGFyc2VyQ29udGV4dCgpIDogc3RyaWN0Q1NTUGFy
c2VyQ29udGV4dCgpOworICAgIHJldHVybiBzdHlsZVNoZWV0ID8gc3R5bGVTaGVldC0+Y29udGVu
dHMoKS0+cGFyc2VyQ29udGV4dCgpIDogc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
aGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQu
Y3BwCShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAgc3RhdGljIGJvb2wgaXNBY2Nl
cHRhYmxlQ1NTU3R5bGVTaGVldFBhcgogI2VuZGlmCiAKIC8vIFJvdWdoIHNpemUgZXN0aW1hdGUg
Zm9yIHRoZSBtZW1vcnkgY2FjaGUuCi11bnNpZ25lZCBTdHlsZVNoZWV0SW50ZXJuYWw6OmVzdGlt
YXRlZFNpemVJbkJ5dGVzKCkgY29uc3QKK3Vuc2lnbmVkIFN0eWxlU2hlZXRDb250ZW50czo6ZXN0
aW1hdGVkU2l6ZUluQnl0ZXMoKSBjb25zdAogewogICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMg
bm90IHRha2UgaW50byBhY2NvdW50IHNpemUgb2YgdGhlIHN0cmluZ3MgaGFuZ2luZyBmcm9tIHZh
cmlvdXMgb2JqZWN0cy4gCiAgICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCBuZWFybHkgYWxs
IG9mIG9mIHRoZW0gYXJlIGF0b21pYyBhbmQgd291bGQgZXhpc3QgYW55d2F5LgpAQCAtODQsMTMg
Kzg0LDEzIEBAIHVuc2lnbmVkIFN0eWxlU2hlZXRJbnRlcm5hbDo6ZXN0aW1hdGVkU2kKICAgICBz
aXplICs9IHJ1bGVDb3VudCgpICogU3R5bGVSdWxlOjphdmVyYWdlU2l6ZUluQnl0ZXMoKTsKIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ltcG9ydFJ1bGVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGlmIChTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gbV9pbXBvcnRSdWxlc1tp
XS0+c3R5bGVTaGVldCgpKQorICAgICAgICBpZiAoU3R5bGVTaGVldENvbnRlbnRzKiBzaGVldCA9
IG1faW1wb3J0UnVsZXNbaV0tPnN0eWxlU2hlZXQoKSkKICAgICAgICAgICAgIHNpemUgKz0gc2hl
ZXQtPmVzdGltYXRlZFNpemVJbkJ5dGVzKCk7CiAgICAgfQogICAgIHJldHVybiBzaXplOwogfQog
Ci1TdHlsZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChTdHlsZVJ1bGVJbXBvcnQq
IG93bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxV
UkwsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCitTdHlsZVNoZWV0Q29udGVudHM6
OlN0eWxlU2hlZXRDb250ZW50cyhTdHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVsZSwgY29uc3QgU3Ry
aW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgZmluYWxVUkwsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmIGNvbnRleHQpCiAgICAgOiBtX293bmVyUnVsZShvd25lclJ1bGUpCiAgICAgLCBtX29y
aWdpbmFsVVJMKG9yaWdpbmFsVVJMKQogICAgICwgbV9maW5hbFVSTChmaW5hbFVSTCkKQEAgLTEw
NSw4ICsxMDUsOCBAQCBTdHlsZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChTCiB7
CiB9CiAKLVN0eWxlU2hlZXRJbnRlcm5hbDo6U3R5bGVTaGVldEludGVybmFsKGNvbnN0IFN0eWxl
U2hlZXRJbnRlcm5hbCYgbykKLSAgICA6IFJlZkNvdW50ZWQ8U3R5bGVTaGVldEludGVybmFsPigp
CitTdHlsZVNoZWV0Q29udGVudHM6OlN0eWxlU2hlZXRDb250ZW50cyhjb25zdCBTdHlsZVNoZWV0
Q29udGVudHMmIG8pCisgICAgOiBSZWZDb3VudGVkPFN0eWxlU2hlZXRDb250ZW50cz4oKQogICAg
ICwgbV9vd25lclJ1bGUoMCkKICAgICAsIG1fb3JpZ2luYWxVUkwoby5tX29yaWdpbmFsVVJMKQog
ICAgICwgbV9maW5hbFVSTChvLm1fZmluYWxVUkwpCkBAIC0xMzIsMTIgKzEzMiwxMiBAQCBTdHls
ZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChjCiAgICAgICAgIG1fY2hpbGRSdWxl
c1tpXSA9IG8ubV9jaGlsZFJ1bGVzW2ldLT5jb3B5KCk7CiB9CiAKLVN0eWxlU2hlZXRJbnRlcm5h
bDo6flN0eWxlU2hlZXRJbnRlcm5hbCgpCitTdHlsZVNoZWV0Q29udGVudHM6On5TdHlsZVNoZWV0
Q29udGVudHMoKQogewogICAgIGNsZWFyUnVsZXMoKTsKIH0KIAotYm9vbCBTdHlsZVNoZWV0SW50
ZXJuYWw6OmlzQ2FjaGVhYmxlKCkgY29uc3QKK2Jvb2wgU3R5bGVTaGVldENvbnRlbnRzOjppc0Nh
Y2hlYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IFN1cHBvcnQgY29weWluZyBpbXBvcnQg
cnVsZXMuCiAgICAgaWYgKCFtX2ltcG9ydFJ1bGVzLmlzRW1wdHkoKSkKQEAgLTE2MCw3ICsxNjAs
NyBAQCBib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6aXNDYWNoZWFibGUoKSBjCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgU3R5bGVTaGVldEludGVybmFsOjpwYXJzZXJBcHBlbmRSdWxlKFBh
c3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSkKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpw
YXJzZXJBcHBlbmRSdWxlKFBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gcnVsZSkKIHsKICAgICBB
U1NFUlQoIXJ1bGUtPmlzQ2hhcnNldFJ1bGUoKSk7CiAgICAgaWYgKHJ1bGUtPmlzSW1wb3J0UnVs
ZSgpKSB7CkBAIC0xNzQsNyArMTc0LDcgQEAgdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcnNl
ckFwcGVuZFJ1bAogICAgIG1fY2hpbGRSdWxlcy5hcHBlbmQocnVsZSk7CiB9CiAKLVN0eWxlUnVs
ZUJhc2UqIFN0eWxlU2hlZXRJbnRlcm5hbDo6cnVsZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAor
U3R5bGVSdWxlQmFzZSogU3R5bGVTaGVldENvbnRlbnRzOjpydWxlQXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGluZGV4IDwgcnVsZUNvdW50KCkpOwogICAgIApAQCAtMTkx
LDcgKzE5MSw3IEBAIFN0eWxlUnVsZUJhc2UqIFN0eWxlU2hlZXRJbnRlcm5hbDo6cnVsZUEKICAg
ICByZXR1cm4gbV9jaGlsZFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLmdldCgpOwogfQogCi11bnNp
Z25lZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnJ1bGVDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBTdHls
ZVNoZWV0Q29udGVudHM6OnJ1bGVDb3VudCgpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcmVzdWx0
ID0gMDsKICAgICByZXN1bHQgKz0gaGFzQ2hhcnNldFJ1bGUoKSA/IDEgOiAwOwpAQCAtMjAwLDEy
ICsyMDAsMTIgQEAgdW5zaWduZWQgU3R5bGVTaGVldEludGVybmFsOjpydWxlQ291bnQoKQogICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKLXZvaWQgU3R5bGVTaGVldEludGVybmFsOjpjbGVhckNoYXJz
ZXRSdWxlKCkKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpjbGVhckNoYXJzZXRSdWxlKCkKIHsK
ICAgICBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlID0gU3RyaW5nKCk7CiB9CiAKLXZvaWQgU3R5
bGVTaGVldEludGVybmFsOjpjbGVhclJ1bGVzKCkKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpj
bGVhclJ1bGVzKCkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9pbXBvcnRSdWxl
cy5zaXplKCk7ICsraSkgewogICAgICAgICBBU1NFUlQobV9pbXBvcnRSdWxlcy5hdChpKS0+cGFy
ZW50U3R5bGVTaGVldCgpID09IHRoaXMpOwpAQCAtMjE2LDE0ICsyMTYsMTQgQEAgdm9pZCBTdHls
ZVNoZWV0SW50ZXJuYWw6OmNsZWFyUnVsZXMoKQogICAgIGNsZWFyQ2hhcnNldFJ1bGUoKTsKIH0K
IAotdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcnNlclNldEVuY29kaW5nRnJvbUNoYXJzZXRS
dWxlKGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpCit2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFy
c2VyU2V0RW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUoY29uc3QgU3RyaW5nJiBlbmNvZGluZykKIHsK
ICAgICAvLyBQYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGVyZSBpcyBldmVyIG9ubHkgb25lIEBjaGFy
c2V0LgogICAgIEFTU0VSVChtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlLmlzTnVsbCgpKTsKICAg
ICBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlID0gZW5jb2Rpbmc7IAogfQogCi1ib29sIFN0eWxl
U2hlZXRJbnRlcm5hbDo6d3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNl
PiBydWxlLCB1bnNpZ25lZCBpbmRleCkKK2Jvb2wgU3R5bGVTaGVldENvbnRlbnRzOjp3cmFwcGVy
SW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUsIHVuc2lnbmVkIGluZGV4
KQogewogICAgIEFTU0VSVChtX2lzTXV0YWJsZSk7CiAgICAgQVNTRVJUKGluZGV4IDw9IHJ1bGVD
b3VudCgpKTsKQEAgLTI1OSw3ICsyNTksNyBAQCBib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6d3Jh
cHBlckluc2VydFJ1CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU3R5bGVTaGVldEludGVy
bmFsOjp3cmFwcGVyRGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCkKK3ZvaWQgU3R5bGVTaGVldENv
bnRlbnRzOjp3cmFwcGVyRGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCkKIHsKICAgICBBU1NFUlQo
bV9pc011dGFibGUpOwogICAgIEFTU0VSVChpbmRleCA8IHJ1bGVDb3VudCgpKTsKQEAgLTI4Miwx
NCArMjgyLDE0IEBAIHZvaWQgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVyRGVsZXRlUnUKICAg
ICBtX2NoaWxkUnVsZXMucmVtb3ZlKGNoaWxkVmVjdG9ySW5kZXgpOwogfQogCi12b2lkIFN0eWxl
U2hlZXRJbnRlcm5hbDo6cGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpw
YXJzZXJBZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21p
Y1N0cmluZyYgdXJpKQogewogICAgIGlmICh1cmkuaXNOdWxsKCkgfHwgcHJlZml4LmlzTnVsbCgp
KQogICAgICAgICByZXR1cm47CiAgICAgbV9uYW1lc3BhY2VzLmFkZChwcmVmaXgsIHVyaSk7CiB9
CiAKLWNvbnN0IEF0b21pY1N0cmluZyYgU3R5bGVTaGVldEludGVybmFsOjpkZXRlcm1pbmVOYW1l
c3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpCitjb25zdCBBdG9taWNTdHJpbmcmIFN0
eWxlU2hlZXRDb250ZW50czo6ZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYg
cHJlZml4KQogewogICAgIGlmIChwcmVmaXguaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxs
QXRvbTsgLy8gTm8gbmFtZXNwYWNlLiBJZiBhbiBlbGVtZW50L2F0dHJpYnV0ZSBoYXMgYSBuYW1l
c3BhY2UsIHdlIHdvbid0IG1hdGNoIGl0LgpAQCAtMzAxLDcgKzMwMSw3IEBAIGNvbnN0IEF0b21p
Y1N0cmluZyYgU3R5bGVTaGVldEludGVybmFsOjoKICAgICByZXR1cm4gaXQtPnNlY29uZDsKIH0K
IAotdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcnNlQXV0aG9yU3R5bGVTaGVldChjb25zdCBD
YWNoZWRDU1NTdHlsZVNoZWV0KiBjYWNoZWRTdHlsZVNoZWV0LCBjb25zdCBTZWN1cml0eU9yaWdp
biogc2VjdXJpdHlPcmlnaW4pCit2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VBdXRob3JT
dHlsZVNoZWV0KGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqIGNhY2hlZFN0eWxlU2hlZXQsIGNv
bnN0IFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbikKIHsKICAgICAvLyBDaGVjayB0byBz
ZWUgaWYgd2Ugc2hvdWxkIGVuZm9yY2UgdGhlIE1JTUUgdHlwZSBvZiB0aGUgQ1NTIHJlc291cmNl
IGluIHN0cmljdCBtb2RlLgogICAgIC8vIFJ1bm5pbmcgaW4gaVdlYiAyIGlzIG9uZSBleGFtcGxl
IG9mIHdoZXJlIHdlIGRvbid0IHdhbnQgdG8gLSA8cmRhcjovL3Byb2JsZW0vNjA5OTc0OD4KQEAg
LTMzNCwxMiArMzM0LDEyIEBAIHZvaWQgU3R5bGVTaGVldEludGVybmFsOjpwYXJzZUF1dGhvclN0
eWwKICAgICB9CiB9CiAKLWJvb2wgU3R5bGVTaGVldEludGVybmFsOjpwYXJzZVN0cmluZyhjb25z
dCBTdHJpbmcmIHNoZWV0VGV4dCkKK2Jvb2wgU3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZVN0cmlu
Zyhjb25zdCBTdHJpbmcmIHNoZWV0VGV4dCkKIHsKICAgICByZXR1cm4gcGFyc2VTdHJpbmdBdExp
bmUoc2hlZXRUZXh0LCAwKTsKIH0KIAotYm9vbCBTdHlsZVNoZWV0SW50ZXJuYWw6OnBhcnNlU3Ry
aW5nQXRMaW5lKGNvbnN0IFN0cmluZyYgc2hlZXRUZXh0LCBpbnQgc3RhcnRMaW5lTnVtYmVyKQor
Ym9vbCBTdHlsZVNoZWV0Q29udGVudHM6OnBhcnNlU3RyaW5nQXRMaW5lKGNvbnN0IFN0cmluZyYg
c2hlZXRUZXh0LCBpbnQgc3RhcnRMaW5lTnVtYmVyKQogewogICAgIENTU1BhcnNlciBwKHBhcnNl
ckNvbnRleHQoKSk7CiAgICAgcC5wYXJzZVNoZWV0KHRoaXMsIHNoZWV0VGV4dCwgc3RhcnRMaW5l
TnVtYmVyKTsKQEAgLTM0Nyw3ICszNDcsNyBAQCBib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6cGFy
c2VTdHJpbmdBdExpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgU3R5bGVTaGVldEludGVy
bmFsOjppc0xvYWRpbmcoKSBjb25zdAorYm9vbCBTdHlsZVNoZWV0Q29udGVudHM6OmlzTG9hZGlu
ZygpIGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1faW1wb3J0UnVsZXMu
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKG1faW1wb3J0UnVsZXNbaV0tPmlzTG9hZGluZygp
KQpAQCAtMzU2LDcgKzM1Niw3IEBAIGJvb2wgU3R5bGVTaGVldEludGVybmFsOjppc0xvYWRpbmco
KSBjb24KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3R5bGVTaGVldEludGVybmFsOjpj
aGVja0xvYWRlZCgpCit2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6Y2hlY2tMb2FkZWQoKQogewog
ICAgIGlmIChpc0xvYWRpbmcoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzY0LDggKzM2NCw4IEBA
IHZvaWQgU3R5bGVTaGVldEludGVybmFsOjpjaGVja0xvYWRlZCgpCiAgICAgLy8gQXZvaWQgfHRo
aXN8IGJlaW5nIGRlbGV0ZWQgYnkgc2NyaXB0cyB0aGF0IHJ1biB2aWEKICAgICAvLyBTY3JpcHRh
YmxlRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKCku
CiAgICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS82NjIyMzAwPi4KLSAgICBSZWZQdHI8U3R5bGVT
aGVldEludGVybmFsPiBwcm90ZWN0b3IodGhpcyk7Ci0gICAgU3R5bGVTaGVldEludGVybmFsKiBw
YXJlbnRTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKKyAgICBSZWZQdHI8U3R5bGVTaGVldENv
bnRlbnRzPiBwcm90ZWN0b3IodGhpcyk7CisgICAgU3R5bGVTaGVldENvbnRlbnRzKiBwYXJlbnRT
aGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKICAgICBpZiAocGFyZW50U2hlZXQpIHsKICAgICAg
ICAgcGFyZW50U2hlZXQtPmNoZWNrTG9hZGVkKCk7CiAgICAgICAgIG1fbG9hZENvbXBsZXRlZCA9
IHRydWU7CkBAIC0zODEsNTMgKzM4MSw1MyBAQCB2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6Y2hl
Y2tMb2FkZWQoKQogICAgICAgICBvd25lck5vZGUtPm5vdGlmeUxvYWRlZFNoZWV0QW5kQWxsQ3Jp
dGljYWxTdWJyZXNvdXJjZXMobV9kaWRMb2FkRXJyb3JPY2N1cik7CiB9CiAKLXZvaWQgU3R5bGVT
aGVldEludGVybmFsOjpub3RpZnlMb2FkZWRTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0
KiBzaGVldCkKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjpub3RpZnlMb2FkZWRTaGVldChjb25z
dCBDYWNoZWRDU1NTdHlsZVNoZWV0KiBzaGVldCkKIHsKICAgICBBU1NFUlQoc2hlZXQpOwogICAg
IG1fZGlkTG9hZEVycm9yT2NjdXIgfD0gc2hlZXQtPmVycm9yT2NjdXJyZWQoKTsKIH0KIAotdm9p
ZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpCit2b2lkIFN0
eWxlU2hlZXRDb250ZW50czo6c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCkKIHsKICAgICBpZiAo
Tm9kZSogb3duZXIgPSBzaW5nbGVPd25lck5vZGUoKSkKICAgICAgICAgb3duZXItPnN0YXJ0TG9h
ZGluZ0R5bmFtaWNTaGVldCgpOwogfQogCi1TdHlsZVNoZWV0SW50ZXJuYWwqIFN0eWxlU2hlZXRJ
bnRlcm5hbDo6cm9vdFN0eWxlU2hlZXQoKSBjb25zdAorU3R5bGVTaGVldENvbnRlbnRzKiBTdHls
ZVNoZWV0Q29udGVudHM6OnJvb3RTdHlsZVNoZWV0KCkgY29uc3QKIHsKLSAgICBjb25zdCBTdHls
ZVNoZWV0SW50ZXJuYWwqIHJvb3QgPSB0aGlzOworICAgIGNvbnN0IFN0eWxlU2hlZXRDb250ZW50
cyogcm9vdCA9IHRoaXM7CiAgICAgd2hpbGUgKHJvb3QtPnBhcmVudFN0eWxlU2hlZXQoKSkKICAg
ICAgICAgcm9vdCA9IHJvb3QtPnBhcmVudFN0eWxlU2hlZXQoKTsKLSAgICByZXR1cm4gY29uc3Rf
Y2FzdDxTdHlsZVNoZWV0SW50ZXJuYWwqPihyb290KTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxT
dHlsZVNoZWV0Q29udGVudHMqPihyb290KTsKIH0KIAotTm9kZSogU3R5bGVTaGVldEludGVybmFs
OjpzaW5nbGVPd25lck5vZGUoKSBjb25zdAorTm9kZSogU3R5bGVTaGVldENvbnRlbnRzOjpzaW5n
bGVPd25lck5vZGUoKSBjb25zdAogewotICAgIFN0eWxlU2hlZXRJbnRlcm5hbCogcm9vdCA9IHJv
b3RTdHlsZVNoZWV0KCk7CisgICAgU3R5bGVTaGVldENvbnRlbnRzKiByb290ID0gcm9vdFN0eWxl
U2hlZXQoKTsKICAgICBpZiAocm9vdC0+bV9jbGllbnRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgQVNTRVJUKHJvb3QtPm1fY2xpZW50cy5zaXplKCkgPT0gMSk7CiAgICAgcmV0
dXJuIHJvb3QtPm1fY2xpZW50c1swXS0+b3duZXJOb2RlKCk7CiB9CiAKLURvY3VtZW50KiBTdHls
ZVNoZWV0SW50ZXJuYWw6OnNpbmdsZU93bmVyRG9jdW1lbnQoKSBjb25zdAorRG9jdW1lbnQqIFN0
eWxlU2hlZXRDb250ZW50czo6c2luZ2xlT3duZXJEb2N1bWVudCgpIGNvbnN0CiB7CiAgICAgTm9k
ZSogb3duZXJOb2RlID0gc2luZ2xlT3duZXJOb2RlKCk7CiAgICAgcmV0dXJuIG93bmVyTm9kZSA/
IG93bmVyTm9kZS0+ZG9jdW1lbnQoKSA6IDA7CiB9CiAKLUtVUkwgU3R5bGVTaGVldEludGVybmFs
Ojpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKK0tVUkwgU3R5bGVTaGVldENv
bnRlbnRzOjpjb21wbGV0ZVVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKIHsKICAgICByZXR1
cm4gQ1NTUGFyc2VyOjpjb21wbGV0ZVVSTChtX3BhcnNlckNvbnRleHQsIHVybCk7CiB9CiAKLXZv
aWQgU3R5bGVTaGVldEludGVybmFsOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYgdXJscykKK3ZvaWQgU3R5bGVTaGVldENvbnRlbnRzOjphZGRTdWJyZXNvdXJjZVN0
eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykKIHsKLSAgICBEZXF1ZTxTdHlsZVNoZWV0
SW50ZXJuYWwqPiBzdHlsZVNoZWV0UXVldWU7CisgICAgRGVxdWU8U3R5bGVTaGVldENvbnRlbnRz
Kj4gc3R5bGVTaGVldFF1ZXVlOwogICAgIHN0eWxlU2hlZXRRdWV1ZS5hcHBlbmQodGhpcyk7CiAK
ICAgICB3aGlsZSAoIXN0eWxlU2hlZXRRdWV1ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgU3R5bGVT
aGVldEludGVybmFsKiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldFF1ZXVlLnRha2VGaXJzdCgpOwor
ICAgICAgICBTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0UXVldWUu
dGFrZUZpcnN0KCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3R5bGVTaGVldC0+bV9pbXBvcnRSdWxlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgU3R5
bGVSdWxlSW1wb3J0KiBpbXBvcnRSdWxlID0gc3R5bGVTaGVldC0+bV9pbXBvcnRSdWxlc1tpXS5n
ZXQoKTsKQEAgLTQ0NiwzMiArNDQ2LDMyIEBAIHZvaWQgU3R5bGVTaGVldEludGVybmFsOjphZGRT
dWJyZXNvdXJjZVMKICAgICB9CiB9CiAKLVN0eWxlU2hlZXRJbnRlcm5hbCogU3R5bGVTaGVldElu
dGVybmFsOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKK1N0eWxlU2hlZXRDb250ZW50cyogU3R5
bGVTaGVldENvbnRlbnRzOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKIHsKICAgICByZXR1cm4g
bV9vd25lclJ1bGUgPyBtX293bmVyUnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogMDsKIH0KIAot
dm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnJlZ2lzdGVyQ2xpZW50KENTU1N0eWxlU2hlZXQqIHNo
ZWV0KQordm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnJlZ2lzdGVyQ2xpZW50KENTU1N0eWxlU2hl
ZXQqIHNoZWV0KQogewogICAgIEFTU0VSVCghbV9jbGllbnRzLmNvbnRhaW5zKHNoZWV0KSk7CiAg
ICAgbV9jbGllbnRzLmFwcGVuZChzaGVldCk7CiB9CiAKLXZvaWQgU3R5bGVTaGVldEludGVybmFs
Ojp1bnJlZ2lzdGVyQ2xpZW50KENTU1N0eWxlU2hlZXQqIHNoZWV0KQordm9pZCBTdHlsZVNoZWV0
Q29udGVudHM6OnVucmVnaXN0ZXJDbGllbnQoQ1NTU3R5bGVTaGVldCogc2hlZXQpCiB7CiAgICAg
c2l6ZV90IHBvc2l0aW9uID0gbV9jbGllbnRzLmZpbmQoc2hlZXQpOwogICAgIEFTU0VSVChwb3Np
dGlvbiAhPSBub3RGb3VuZCk7CiAgICAgbV9jbGllbnRzLnJlbW92ZShwb3NpdGlvbik7CiB9CiAK
LXZvaWQgU3R5bGVTaGVldEludGVybmFsOjphZGRlZFRvTWVtb3J5Q2FjaGUoKQordm9pZCBTdHls
ZVNoZWV0Q29udGVudHM6OmFkZGVkVG9NZW1vcnlDYWNoZSgpCiB7CiAgICAgQVNTRVJUKCFtX2lz
SW5NZW1vcnlDYWNoZSk7CiAgICAgQVNTRVJUKGlzQ2FjaGVhYmxlKCkpOwogICAgIG1faXNJbk1l
bW9yeUNhY2hlID0gdHJ1ZTsKIH0KIAotdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnJlbW92ZWRG
cm9tTWVtb3J5Q2FjaGUoKQordm9pZCBTdHlsZVNoZWV0Q29udGVudHM6OnJlbW92ZWRGcm9tTWVt
b3J5Q2FjaGUoKQogewogICAgIEFTU0VSVChtX2lzSW5NZW1vcnlDYWNoZSk7CiAgICAgQVNTRVJU
KGlzQ2FjaGVhYmxlKCkpOwpAQCAtNDgxLDI3ICs0ODEsMjcgQEAgdm9pZCBTdHlsZVNoZWV0SW50
ZXJuYWw6OnJlbW92ZWRGcm9tTWVtbwogUGFzc1JlZlB0cjxDU1NTdHlsZVNoZWV0PiBDU1NTdHls
ZVNoZWV0OjpjcmVhdGVJbmxpbmUoTm9kZSogb3duZXJOb2RlLCBjb25zdCBLVVJMJiBiYXNlVVJM
LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogewogICAgIENTU1BhcnNlckNvbnRleHQgcGFyc2Vy
Q29udGV4dChvd25lck5vZGUtPmRvY3VtZW50KCksIGJhc2VVUkwsIGVuY29kaW5nKTsKLSAgICBS
ZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBzaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3Jl
YXRlKGJhc2VVUkwuc3RyaW5nKCksIGJhc2VVUkwsIHBhcnNlckNvbnRleHQpOworICAgIFJlZlB0
cjxTdHlsZVNoZWV0Q29udGVudHM+IHNoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUo
YmFzZVVSTC5zdHJpbmcoKSwgYmFzZVVSTCwgcGFyc2VyQ29udGV4dCk7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBDU1NTdHlsZVNoZWV0KHNoZWV0LnJlbGVhc2UoKSwgb3duZXJOb2RlKSk7CiB9
CiAKLUNTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50
ZXJuYWw+IHN0eWxlU2hlZXQsIENTU0ltcG9ydFJ1bGUqIG93bmVyUnVsZSkKLSAgICA6IG1faW50
ZXJuYWwoc3R5bGVTaGVldCkKK0NTU1N0eWxlU2hlZXQ6OkNTU1N0eWxlU2hlZXQoUGFzc1JlZlB0
cjxTdHlsZVNoZWV0Q29udGVudHM+IGNvbnRlbnRzLCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUp
CisgICAgOiBtX2NvbnRlbnRzKGNvbnRlbnRzKQogICAgICwgbV9pc0Rpc2FibGVkKGZhbHNlKQog
ICAgICwgbV9vd25lck5vZGUoMCkKICAgICAsIG1fb3duZXJSdWxlKG93bmVyUnVsZSkKIHsKLSAg
ICBtX2ludGVybmFsLT5yZWdpc3RlckNsaWVudCh0aGlzKTsKKyAgICBtX2NvbnRlbnRzLT5yZWdp
c3RlckNsaWVudCh0aGlzKTsKIH0KIAotQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVldChQYXNz
UmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc3R5bGVTaGVldCwgTm9kZSogb3duZXJOb2RlKQot
ICAgIDogbV9pbnRlcm5hbChzdHlsZVNoZWV0KQorQ1NTU3R5bGVTaGVldDo6Q1NTU3R5bGVTaGVl
dChQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gY29udGVudHMsIE5vZGUqIG93bmVyTm9k
ZSkKKyAgICA6IG1fY29udGVudHMoY29udGVudHMpCiAgICAgLCBtX2lzRGlzYWJsZWQoZmFsc2Up
CiAgICAgLCBtX293bmVyTm9kZShvd25lck5vZGUpCiAgICAgLCBtX293bmVyUnVsZSgwKQogewog
ICAgIEFTU0VSVChpc0FjY2VwdGFibGVDU1NTdHlsZVNoZWV0UGFyZW50KG93bmVyTm9kZSkpOwot
ICAgIG1faW50ZXJuYWwtPnJlZ2lzdGVyQ2xpZW50KHRoaXMpOworICAgIG1fY29udGVudHMtPnJl
Z2lzdGVyQ2xpZW50KHRoaXMpOwogfQogCiBDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCgp
CkBAIC01MTYsMjUgKzUxNiwyNSBAQCBDU1NTdHlsZVNoZWV0Ojp+Q1NTU3R5bGVTaGVldCgpCiAg
ICAgaWYgKG1fbWVkaWFDU1NPTVdyYXBwZXIpCiAgICAgICAgIG1fbWVkaWFDU1NPTVdyYXBwZXIt
PmNsZWFyUGFyZW50U3R5bGVTaGVldCgpOwogCi0gICAgbV9pbnRlcm5hbC0+dW5yZWdpc3RlckNs
aWVudCh0aGlzKTsKKyAgICBtX2NvbnRlbnRzLT51bnJlZ2lzdGVyQ2xpZW50KHRoaXMpOwogfQog
CiB2b2lkIENTU1N0eWxlU2hlZXQ6OndpbGxNdXRhdGVSdWxlcygpCiB7CiAgICAgLy8gSWYgd2Ug
YXJlIHRoZSBvbmx5IGNsaWVudCBpdCBpcyBzYWZlIHRvIG11dGF0ZS4KLSAgICBpZiAobV9pbnRl
cm5hbC0+aGFzT25lQ2xpZW50KCkgJiYgIW1faW50ZXJuYWwtPmlzSW5NZW1vcnlDYWNoZSgpKSB7
Ci0gICAgICAgIG1faW50ZXJuYWwtPnNldE11dGFibGUoKTsKKyAgICBpZiAobV9jb250ZW50cy0+
aGFzT25lQ2xpZW50KCkgJiYgIW1fY29udGVudHMtPmlzSW5NZW1vcnlDYWNoZSgpKSB7CisgICAg
ICAgIG1fY29udGVudHMtPnNldE11dGFibGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICAvLyBPbmx5IGNhY2hlYWJsZSBzdHlsZXNoZWV0cyBzaG91bGQgaGF2ZSBtdWx0aXBsZSBjbGll
bnRzLgotICAgIEFTU0VSVChtX2ludGVybmFsLT5pc0NhY2hlYWJsZSgpKTsKKyAgICBBU1NFUlQo
bV9jb250ZW50cy0+aXNDYWNoZWFibGUoKSk7CiAKICAgICAvLyBDb3B5LW9uLXdyaXRlLgotICAg
IG1faW50ZXJuYWwtPnVucmVnaXN0ZXJDbGllbnQodGhpcyk7Ci0gICAgbV9pbnRlcm5hbCA9IG1f
aW50ZXJuYWwtPmNvcHkoKTsKLSAgICBtX2ludGVybmFsLT5yZWdpc3RlckNsaWVudCh0aGlzKTsK
KyAgICBtX2NvbnRlbnRzLT51bnJlZ2lzdGVyQ2xpZW50KHRoaXMpOworICAgIG1fY29udGVudHMg
PSBtX2NvbnRlbnRzLT5jb3B5KCk7CisgICAgbV9jb250ZW50cy0+cmVnaXN0ZXJDbGllbnQodGhp
cyk7CiAKLSAgICBtX2ludGVybmFsLT5zZXRNdXRhYmxlKCk7CisgICAgbV9jb250ZW50cy0+c2V0
TXV0YWJsZSgpOwogCiAgICAgLy8gQW55IGV4aXN0aW5nIENTU09NIHdyYXBwZXJzIG5lZWQgdG8g
YmUgY29ubmVjdGVkIHRvIHRoZSBjb3BpZWQgY2hpbGQgcnVsZXMuCiAgICAgcmVhdHRhY2hDaGls
ZFJ1bGVDU1NPTVdyYXBwZXJzKCk7CkBAIC01NDIsOCArNTQyLDggQEAgdm9pZCBDU1NTdHlsZVNo
ZWV0Ojp3aWxsTXV0YXRlUnVsZXMoKQogCiB2b2lkIENTU1N0eWxlU2hlZXQ6OmRpZE11dGF0ZVJ1
bGVzKCkKIHsKLSAgICBBU1NFUlQobV9pbnRlcm5hbC0+aXNNdXRhYmxlKCkpOwotICAgIEFTU0VS
VChtX2ludGVybmFsLT5oYXNPbmVDbGllbnQoKSk7CisgICAgQVNTRVJUKG1fY29udGVudHMtPmlz
TXV0YWJsZSgpKTsKKyAgICBBU1NFUlQobV9jb250ZW50cy0+aGFzT25lQ2xpZW50KCkpOwogCiAg
ICAgZGlkTXV0YXRlKCk7CiB9CkBAIC01NjEsNyArNTYxLDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0
OjpyZWF0dGFjaENoaWxkUnVsZUNTUwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2No
aWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgaWYgKCFtX2NoaWxk
UnVsZUNTU09NV3JhcHBlcnNbaV0pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbV9j
aGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5yZWF0dGFjaChtX2ludGVybmFsLT5ydWxlQXQoaSkp
OworICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0tPnJlYXR0YWNoKG1fY29udGVu
dHMtPnJ1bGVBdChpKSk7CiAgICAgfQogfQogCkBAIC01ODEsNyArNTgxLDcgQEAgdm9pZCBDU1NT
dHlsZVNoZWV0OjpzZXRNZWRpYVF1ZXJpZXMoUGFzcwogCiB1bnNpZ25lZCBDU1NTdHlsZVNoZWV0
OjpsZW5ndGgoKSBjb25zdAogewotICAgIHJldHVybiBtX2ludGVybmFsLT5ydWxlQ291bnQoKTsK
KyAgICByZXR1cm4gbV9jb250ZW50cy0+cnVsZUNvdW50KCk7CiB9CiAKIENTU1J1bGUqIENTU1N0
eWxlU2hlZXQ6Oml0ZW0odW5zaWduZWQgaW5kZXgpCkBAIC01OTYsMTggKzU5NiwxOCBAQCBDU1NS
dWxlKiBDU1NTdHlsZVNoZWV0OjppdGVtKHVuc2lnbmVkIGluCiAgICAgCiAgICAgUmVmUHRyPENT
U1J1bGU+JiBjc3NSdWxlID0gbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2luZGV4XTsKICAgICBp
ZiAoIWNzc1J1bGUpIHsKLSAgICAgICAgaWYgKGluZGV4ID09IDAgJiYgbV9pbnRlcm5hbC0+aGFz
Q2hhcnNldFJ1bGUoKSkgewotICAgICAgICAgICAgQVNTRVJUKCFtX2ludGVybmFsLT5ydWxlQXQo
MCkpOwotICAgICAgICAgICAgY3NzUnVsZSA9IENTU0NoYXJzZXRSdWxlOjpjcmVhdGUodGhpcywg
bV9pbnRlcm5hbC0+ZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUoKSk7CisgICAgICAgIGlmIChpbmRl
eCA9PSAwICYmIG1fY29udGVudHMtPmhhc0NoYXJzZXRSdWxlKCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghbV9jb250ZW50cy0+cnVsZUF0KDApKTsKKyAgICAgICAgICAgIGNzc1J1bGUgPSBDU1ND
aGFyc2V0UnVsZTo6Y3JlYXRlKHRoaXMsIG1fY29udGVudHMtPmVuY29kaW5nRnJvbUNoYXJzZXRS
dWxlKCkpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNzc1J1bGUgPSBtX2ludGVybmFs
LT5ydWxlQXQoaW5kZXgpLT5jcmVhdGVDU1NPTVdyYXBwZXIodGhpcyk7CisgICAgICAgICAgICBj
c3NSdWxlID0gbV9jb250ZW50cy0+cnVsZUF0KGluZGV4KS0+Y3JlYXRlQ1NTT01XcmFwcGVyKHRo
aXMpOwogICAgIH0KICAgICByZXR1cm4gY3NzUnVsZS5nZXQoKTsKIH0KIAogUGFzc1JlZlB0cjxD
U1NSdWxlTGlzdD4gQ1NTU3R5bGVTaGVldDo6cnVsZXMoKQogewotICAgIEtVUkwgdXJsID0gbV9p
bnRlcm5hbC0+ZmluYWxVUkwoKTsKKyAgICBLVVJMIHVybCA9IG1fY29udGVudHMtPmZpbmFsVVJM
KCk7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gb3duZXJEb2N1bWVudCgpOwogICAgIGlmICgh
dXJsLmlzRW1wdHkoKSAmJiBkb2N1bWVudCAmJiAhZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkt
PmNhblJlcXVlc3QodXJsKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02MjUsMTUgKzYyNSwxNSBA
QCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNoZWV0OjpyCiAKIHVuc2lnbmVkIENT
U1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QgU3RyaW5nJiBydWxlU3RyaW5nLCB1bnNpZ25l
ZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NT
T01XcmFwcGVycy5pc0VtcHR5KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9
PSBtX2ludGVybmFsLT5ydWxlQ291bnQoKSk7CisgICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01X
cmFwcGVycy5pc0VtcHR5KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBt
X2NvbnRlbnRzLT5ydWxlQ291bnQoKSk7CiAKICAgICBlYyA9IDA7CiAgICAgaWYgKGluZGV4ID4g
bGVuZ3RoKCkpIHsKICAgICAgICAgZWMgPSBJTkRFWF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQotICAgIENTU1BhcnNlciBwKG1faW50ZXJuYWwtPnBhcnNlckNvbnRleHQoKSk7
Ci0gICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IHJ1bGUgPSBwLnBhcnNlUnVsZShtX2ludGVybmFs
LmdldCgpLCBydWxlU3RyaW5nKTsKKyAgICBDU1NQYXJzZXIgcChtX2NvbnRlbnRzLT5wYXJzZXJD
b250ZXh0KCkpOworICAgIFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBydWxlID0gcC5wYXJzZVJ1bGUo
bV9jb250ZW50cy5nZXQoKSwgcnVsZVN0cmluZyk7CiAKICAgICBpZiAoIXJ1bGUpIHsKICAgICAg
ICAgZWMgPSBTWU5UQVhfRVJSOwpAQCAtNjQxLDcgKzY0MSw3IEBAIHVuc2lnbmVkIENTU1N0eWxl
U2hlZXQ6Omluc2VydFJ1bGUoY29uc3QKICAgICB9CiAgICAgUnVsZU11dGF0aW9uU2NvcGUgbXV0
YXRpb25TY29wZSh0aGlzKTsKIAotICAgIGJvb2wgc3VjY2VzcyA9IG1faW50ZXJuYWwtPndyYXBw
ZXJJbnNlcnRSdWxlKHJ1bGUsIGluZGV4KTsKKyAgICBib29sIHN1Y2Nlc3MgPSBtX2NvbnRlbnRz
LT53cmFwcGVySW5zZXJ0UnVsZShydWxlLCBpbmRleCk7CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAg
ICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAg
LTY1NCw3ICs2NTQsNyBAQCB1bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0
CiAKIHZvaWQgQ1NTU3R5bGVTaGVldDo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCiB7Ci0gICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0Vt
cHR5KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBtX2ludGVybmFsLT5y
dWxlQ291bnQoKSk7CisgICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5
KCkgfHwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKSA9PSBtX2NvbnRlbnRzLT5ydWxl
Q291bnQoKSk7CiAKICAgICBlYyA9IDA7CiAgICAgaWYgKGluZGV4ID49IGxlbmd0aCgpKSB7CkBA
IC02NjMsNyArNjYzLDcgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpkZWxldGVSdWxlKHVuc2lnbmVk
IAogICAgIH0KICAgICBSdWxlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwogCi0g
ICAgbV9pbnRlcm5hbC0+d3JhcHBlckRlbGV0ZVJ1bGUoaW5kZXgpOworICAgIG1fY29udGVudHMt
PndyYXBwZXJEZWxldGVSdWxlKGluZGV4KTsKIAogICAgIGlmICghbV9jaGlsZFJ1bGVDU1NPTVdy
YXBwZXJzLmlzRW1wdHkoKSkgewogICAgICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJz
W2luZGV4XSkKQEAgLTY4OCw3ICs2ODgsNyBAQCBpbnQgQ1NTU3R5bGVTaGVldDo6YWRkUnVsZShj
b25zdCBTdHJpbmcmCiAKIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IENTU1N0eWxlU2hlZXQ6OmNz
c1J1bGVzKCkKIHsKLSAgICBLVVJMIHVybCA9IG1faW50ZXJuYWwtPmZpbmFsVVJMKCk7CisgICAg
S1VSTCB1cmwgPSBtX2NvbnRlbnRzLT5maW5hbFVSTCgpOwogICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IG93bmVyRG9jdW1lbnQoKTsKICAgICBpZiAoIXVybC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQg
JiYgIWRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLT5jYW5SZXF1ZXN0KHVybCkpCiAgICAgICAg
IHJldHVybiAwOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiAx
MTgxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NiwyMiArNDYsMjIgQEAgY2xhc3MgU3R5bGVSdWxlSW1wb3J0OwogCiB0eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOwogCi1jbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWwgOiBwdWJsaWMg
UmVmQ291bnRlZDxTdHlsZVNoZWV0SW50ZXJuYWw+IHsKK2NsYXNzIFN0eWxlU2hlZXRDb250ZW50
cyA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlU2hlZXRDb250ZW50cz4gewogcHVibGljOgotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKGNvbnN0IENTU1Bh
cnNlckNvbnRleHQmIGNvbnRleHQgPSBDU1NQYXJzZXJDb250ZXh0KENTU1N0cmljdE1vZGUpKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gY3JlYXRlKGNvbnN0IENT
U1BhcnNlckNvbnRleHQmIGNvbnRleHQgPSBDU1NQYXJzZXJDb250ZXh0KENTU1N0cmljdE1vZGUp
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwo
MCwgU3RyaW5nKCksIEtVUkwoKSwgY29udGV4dCkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFN0eWxlU2hlZXRDb250ZW50cygwLCBTdHJpbmcoKSwgS1VSTCgpLCBjb250ZXh0KSk7CiAg
ICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY3JlYXRlKGNv
bnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0JiBjb250ZXh0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0eWxlU2hlZXRD
b250ZW50cz4gY3JlYXRlKGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZp
bmFsVVJMLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwoMCwgb3JpZ2luYWxVUkwsIGZp
bmFsVVJMLCBjb250ZXh0KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVl
dENvbnRlbnRzKDAsIG9yaWdpbmFsVVJMLCBmaW5hbFVSTCwgY29udGV4dCkpOwogICAgIH0KLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IGNyZWF0ZShTdHlsZVJ1bGVJ
bXBvcnQqIG93bmVyUnVsZSwgY29uc3QgU3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYg
ZmluYWxVUkwsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBjcmVhdGUoU3R5bGVSdWxlSW1wb3J0KiBvd25l
clJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkwsIGNvbnN0IEtVUkwmIGZpbmFsVVJMLCBj
b25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwob3duZXJSdWxlLCBvcmlnaW5hbFVSTCwgZmlu
YWxVUkwsIGNvbnRleHQpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0
Q29udGVudHMob3duZXJSdWxlLCBvcmlnaW5hbFVSTCwgZmluYWxVUkwsIGNvbnRleHQpKTsKICAg
ICB9CiAKLSAgICB+U3R5bGVTaGVldEludGVybmFsKCk7CisgICAgflN0eWxlU2hlZXRDb250ZW50
cygpOwogICAgIAogICAgIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIHBhcnNlckNvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX3BhcnNlckNvbnRleHQ7IH0KIApAQCAtNzgsNyArNzgsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjaGVja0xvYWRlZCgpOwogICAgIHZvaWQgc3RhcnRMb2FkaW5nRHluYW1p
Y1NoZWV0KCk7CiAKLSAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHJvb3RTdHlsZVNoZWV0KCkgY29u
c3Q7CisgICAgU3R5bGVTaGVldENvbnRlbnRzKiByb290U3R5bGVTaGVldCgpIGNvbnN0OwogICAg
IE5vZGUqIHNpbmdsZU93bmVyTm9kZSgpIGNvbnN0OwogICAgIERvY3VtZW50KiBzaW5nbGVPd25l
ckRvY3VtZW50KCkgY29uc3Q7CiAKQEAgLTEwOSw3ICsxMDksNyBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIG5vdGlmeUxvYWRlZFNoZWV0KGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqKTsKICAgICAK
LSAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdDsKKyAgICBT
dHlsZVNoZWV0Q29udGVudHMqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdDsKICAgICBTdHlsZVJ1
bGVJbXBvcnQqIG93bmVyUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJSdWxlOyB9CiAgICAg
dm9pZCBjbGVhck93bmVyUnVsZSgpIHsgbV9vd25lclJ1bGUgPSAwOyB9CiAgICAgCkBAIC0xMzEs
NyArMTMxLDcgQEAgcHVibGljOgogICAgIGJvb2wgd3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0
cjxTdHlsZVJ1bGVCYXNlPiwgdW5zaWduZWQgaW5kZXgpOwogICAgIHZvaWQgd3JhcHBlckRlbGV0
ZVJ1bGUodW5zaWduZWQgaW5kZXgpOwogCi0gICAgUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJu
YWw+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldEludGVybmFs
KCp0aGlzKSk7IH0KKyAgICBQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gY29weSgpIGNv
bnN0IHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVNoZWV0Q29udGVudHMoKnRoaXMpKTsgfQog
CiAgICAgdm9pZCByZWdpc3RlckNsaWVudChDU1NTdHlsZVNoZWV0Kik7CiAgICAgdm9pZCB1bnJl
Z2lzdGVyQ2xpZW50KENTU1N0eWxlU2hlZXQqKTsKQEAgLTE0NSw4ICsxNDUsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCByZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7CiAKIHByaXZhdGU6Ci0gICAgU3R5
bGVTaGVldEludGVybmFsKFN0eWxlUnVsZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcm
IG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
Jik7Ci0gICAgU3R5bGVTaGVldEludGVybmFsKGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCYpOwor
ICAgIFN0eWxlU2hlZXRDb250ZW50cyhTdHlsZVJ1bGVJbXBvcnQqIG93bmVyUnVsZSwgY29uc3Qg
U3RyaW5nJiBvcmlnaW5hbFVSTCwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYpOworICAgIFN0eWxlU2hlZXRDb250ZW50cyhjb25zdCBTdHlsZVNoZWV0Q29udGVu
dHMmKTsKIAogICAgIHZvaWQgY2xlYXJDaGFyc2V0UnVsZSgpOwogCkBAIC0xNzYsMTEgKzE3Niwx
MSBAQCBwcml2YXRlOgogCiBjbGFzcyBDU1NTdHlsZVNoZWV0IDogcHVibGljIFN0eWxlU2hlZXQg
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gY3JlYXRlKFBhc3NS
ZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBzaGVldCwgQ1NTSW1wb3J0UnVsZSogb3duZXJSdWxl
ID0gMCkgCisgICAgc3RhdGljIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBjcmVhdGUoUGFzc1JlZlB0
cjxTdHlsZVNoZWV0Q29udGVudHM+IHNoZWV0LCBDU1NJbXBvcnRSdWxlKiBvd25lclJ1bGUgPSAw
KSAKICAgICB7IAogICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQoc2hl
ZXQsIG93bmVyUnVsZSkpOwogICAgIH0KLSAgICBzdGF0aWMgUmVmUHRyPENTU1N0eWxlU2hlZXQ+
IGNyZWF0ZShQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc2hlZXQsIE5vZGUqIG93bmVy
Tm9kZSkKKyAgICBzdGF0aWMgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGNyZWF0ZShQYXNzUmVmUHRy
PFN0eWxlU2hlZXRDb250ZW50cz4gc2hlZXQsIE5vZGUqIG93bmVyTm9kZSkKICAgICB7IAogICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlU2hlZXQoc2hlZXQsIG93bmVyTm9kZSkp
OwogICAgIH0KQEAgLTE5MSw3ICsxOTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDU1NTdHls
ZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBO
b2RlKiBvd25lck5vZGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX293bmVyTm9kZTsgfQog
ICAgIHZpcnR1YWwgTWVkaWFMaXN0KiBtZWRpYSgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1
YWwgU3RyaW5nIGhyZWYoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2ludGVybmFsLT5vcmln
aW5hbFVSTCgpOyB9ICAKKyAgICB2aXJ0dWFsIFN0cmluZyBocmVmKCkgY29uc3QgT1ZFUlJJREUg
eyByZXR1cm4gbV9jb250ZW50cy0+b3JpZ2luYWxVUkwoKTsgfQogICAgIHZpcnR1YWwgU3RyaW5n
IHRpdGxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90aXRsZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBkaXNhYmxlZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faXNEaXNhYmxlZDsgfQog
ICAgIHZpcnR1YWwgdm9pZCBzZXREaXNhYmxlZChib29sKSBPVkVSUklERTsKQEAgLTIxMiw4ICsy
MTIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJPd25lck5vZGUoKSBPVkVS
UklERSB7IG1fb3duZXJOb2RlID0gMDsgfQogICAgIHZpcnR1YWwgQ1NTSW1wb3J0UnVsZSogb3du
ZXJSdWxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vd25lclJ1bGU7IH0KLSAgICB2aXJ0
dWFsIEtVUkwgYmFzZVVSTCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faW50ZXJuYWwtPmJh
c2VVUkwoKTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX2ludGVybmFsLT5pc0xvYWRpbmcoKTsgfQorICAgIHZpcnR1YWwgS1VSTCBiYXNl
VVJMKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9jb250ZW50cy0+YmFzZVVSTCgpOyB9Cisg
ICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY29u
dGVudHMtPmlzTG9hZGluZygpOyB9CiAgICAgCiAgICAgdm9pZCBjbGVhck93bmVyUnVsZSgpIHsg
bV9vd25lclJ1bGUgPSAwOyB9CiAgICAgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdDsK
QEAgLTIzOSwxNiArMjM5LDE2IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyQ2hpbGRSdWxlQ1NT
T01XcmFwcGVycygpOwogICAgIHZvaWQgcmVhdHRhY2hDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7
CiAKLSAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIGludGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9p
bnRlcm5hbC5nZXQoKTsgfQorICAgIFN0eWxlU2hlZXRDb250ZW50cyogY29udGVudHMoKSBjb25z
dCB7IHJldHVybiBtX2NvbnRlbnRzLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0gICAgQ1NTU3R5bGVT
aGVldChQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4sIENTU0ltcG9ydFJ1bGUqIG93bmVy
UnVsZSk7Ci0gICAgQ1NTU3R5bGVTaGVldChQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4s
IE5vZGUqIG93bmVyTm9kZSk7CisgICAgQ1NTU3R5bGVTaGVldChQYXNzUmVmUHRyPFN0eWxlU2hl
ZXRDb250ZW50cz4sIENTU0ltcG9ydFJ1bGUqIG93bmVyUnVsZSk7CisgICAgQ1NTU3R5bGVTaGVl
dChQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4sIE5vZGUqIG93bmVyTm9kZSk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDU1NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIHZpcnR1YWwgU3RyaW5nIHR5cGUoKSBjb25zdCB7IHJldHVybiAidGV4dC9jc3MiOyB9CiAg
ICAgCi0gICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gbV9pbnRlcm5hbDsKKyAgICBSZWZQ
dHI8U3R5bGVTaGVldENvbnRlbnRzPiBtX2NvbnRlbnRzOwogICAgIGJvb2wgbV9pc0Rpc2FibGVk
OwogICAgIFN0cmluZyBtX3RpdGxlOwogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtX21lZGlh
UXVlcmllczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkocmV2aXNpb24gMTE4MTg0KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTks
NyArOTksNyBAQCBDU1NWYWx1ZTo6VHlwZSBDU1NWYWx1ZTo6Y3NzVmFsdWVUeXBlKCkgCiAgICAg
cmV0dXJuIENTU19DVVNUT007CiB9CiAKLXZvaWQgQ1NTVmFsdWU6OmFkZFN1YnJlc291cmNlU3R5
bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBjb25zdCBTdHlsZVNoZWV0SW50ZXJuYWwq
IHN0eWxlU2hlZXQpCit2b2lkIENTU1ZhbHVlOjphZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0
SGFzaFNldDxLVVJMPiYgdXJscywgY29uc3QgU3R5bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0
KQogewogICAgIC8vIFRoaXMgc2hvdWxkIGdldCBjYWxsZWQgZm9yIGludGVybmFsIGluc3RhbmNl
cyBvbmx5LgogICAgIEFTU0VSVCghaXNDU1NPTVNhZmUoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFs
dWUuaAkocmV2aXNpb24gMTE4MTg0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1jbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CitjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiAg
ICAgCiAvLyBGSVhNRTogVGhlIGN1cnJlbnQgQ1NTVmFsdWUgYW5kIHN1YmNsYXNzZXMgc2hvdWxk
IGJlIHR1cm5lZCBpbnRvIGludGVybmFsIHR5cGVzIChTdHlsZVZhbHVlKS4KIC8vIFRoZSBmZXcg
c3VidHlwZXMgdGhhdCBhcmUgYWN0dWFsbHkgZXhwb3NlZCBpbiBDU1NPTSBjYW4gYmUgc2VlbiBp
biB0aGUgY2xvbmVGb3JDU1NPTSgpIGZ1bmN0aW9uLgpAQCAtMTA3LDcgKzEwNyw3IEBAIHB1Ymxp
YzoKIAogICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IGNsb25lRm9yQ1NTT00oKSBjb25zdDsKIAot
ICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mLCBjb25z
dCBTdHlsZVNoZWV0SW50ZXJuYWwqKTsKKyAgICB2b2lkIGFkZFN1YnJlc291cmNlU3R5bGVVUkxz
KExpc3RIYXNoU2V0PEtVUkw+JiwgY29uc3QgU3R5bGVTaGVldENvbnRlbnRzKik7CiAKIHByb3Rl
Y3RlZDoKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlTGlzdC5jcHAJKHJldmlzaW9uIDEx
ODE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzYsNyArMTM2LDcgQEAgU3RyaW5nIENTU1ZhbHVlTGlzdDo6Y3VzdG9tQ3NzVGV4
dCgpIGNvbgogICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBDU1NWYWx1
ZUxpc3Q6OmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzLCBj
b25zdCBTdHlsZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQpCit2b2lkIENTU1ZhbHVlTGlzdDo6
YWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIGNvbnN0IFN0
eWxlU2hlZXRDb250ZW50cyogc3R5bGVTaGVldCkKIHsKICAgICBzaXplX3Qgc2l6ZSA9IG1fdmFs
dWVzLnNpemUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7ICsraSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWVMaXN0LmgJKHJldmlzaW9uIDExODE4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NWYWx1ZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBwdWJsaWM6CiAKICAgICBTdHJpbmcgY3VzdG9tQ3NzVGV4dCgpIGNvbnN0OwogCi0gICAgdm9p
ZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYsIGNvbnN0IFN0eWxl
U2hlZXRJbnRlcm5hbCopOworICAgIHZvaWQgYWRkU3VicmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhh
c2hTZXQ8S1VSTD4mLCBjb25zdCBTdHlsZVNoZWV0Q29udGVudHMqKTsKICAgICAKICAgICBQYXNz
UmVmUHRyPENTU1ZhbHVlTGlzdD4gY2xvbmVGb3JDU1NPTSgpIGNvbnN0OwogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
LmNwcAkocmV2aXNpb24gMTE4MTg0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNSwxMCArMzA1LDEw
IEBAIENTU1ZhbHVlKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24KICAgICByZXR1cm4g
Y2xvbmVkVmFsdWUuZ2V0KCk7CiB9CiAKLVN0eWxlU2hlZXRJbnRlcm5hbCogUHJvcGVydHlTZXRD
U1NTdHlsZURlY2xhcmF0aW9uOjpjb250ZXh0U3R5bGVTaGVldCgpIGNvbnN0CitTdHlsZVNoZWV0
Q29udGVudHMqIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y29udGV4dFN0eWxlU2hl
ZXQoKSBjb25zdAogeyAKICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTdHlsZVNoZWV0ID0gcGFyZW50
U3R5bGVTaGVldCgpOwotICAgIHJldHVybiBjc3NTdHlsZVNoZWV0ID8gY3NzU3R5bGVTaGVldC0+
aW50ZXJuYWwoKSA6IDA7CisgICAgcmV0dXJuIGNzc1N0eWxlU2hlZXQgPyBjc3NTdHlsZVNoZWV0
LT5jb250ZW50cygpIDogMDsKIH0KIAogUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBQcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNvcHkoKSBjb25zdApJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2
aXNpb24gMTE4MTg0KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIGNsYXNzIENTU1J1
bGU7CiBjbGFzcyBDU1NQcm9wZXJ0eTsKIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgU3R5bGVQcm9w
ZXJ0eVNldDsKLWNsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKK2NsYXNzIFN0eWxlU2hlZXRDb250
ZW50czsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiAKIGNsYXNzIFByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbiA6IHB1YmxpYyBDU1NTdHlsZURlY2xhcmF0aW9uIHsKQEAgLTQzLDcgKzQzLDcg
QEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgU3R5bGVkRWxlbWVudCogcGFyZW50RWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRFbGVt
ZW50KCkgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQotICAgIFN0eWxlU2hlZXRJbnRlcm5hbCog
Y29udGV4dFN0eWxlU2hlZXQoKSBjb25zdDsKKyAgICBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRl
eHRTdHlsZVNoZWV0KCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHJlZigpIE9WRVJS
SURFOwogICAgIHZpcnR1YWwgdm9pZCBkZXJlZigpIE9WRVJSSURFOwpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVByb3BlcnR5U2V0LmNwcAkocmV2aXNpb24gMTE4MTg0KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTAs
NyArNTEwLDcgQEAgYm9vbCBTdHlsZVByb3BlcnR5U2V0Ojppc1Byb3BlcnR5SW1wbGljaQogICAg
IHJldHVybiBwcm9wZXJ0eSA/IHByb3BlcnR5LT5pc0ltcGxpY2l0KCkgOiBmYWxzZTsKIH0KIAot
Ym9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNoZWV0SW50ZXJu
YWwqIGNvbnRleHRTdHlsZVNoZWV0KQorYm9vbCBTdHlsZVByb3BlcnR5U2V0OjpzZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIC8v
IFNldHRpbmcgdGhlIHZhbHVlIHRvIGFuIGVtcHR5IHN0cmluZyBqdXN0IHJlbW92ZXMgdGhlIHBy
b3BlcnR5IGluIGJvdGggSUUgYW5kIEdlY2tvLgogICAgIC8vIFNldHRpbmcgaXQgdG8gbnVsbCBz
ZWVtcyB0byBwcm9kdWNlIGxlc3MgY29uc2lzdGVudCByZXN1bHRzLCBidXQgd2UgdHJlYXQgaXQg
anVzdCB0aGUgc2FtZS4KQEAgLTU1Nyw3ICs1NTcsNyBAQCBib29sIFN0eWxlUHJvcGVydHlTZXQ6
OnNldFByb3BlcnR5KENTU1ByCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU3R5bGVQcm9w
ZXJ0eVNldDo6cGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVjbGFyYXRpb24s
IFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQpCit2b2lkIFN0eWxlUHJvcGVy
dHlTZXQ6OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHlsZURlY2xhcmF0aW9uLCBT
dHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KQogewogICAgIG1fcHJvcGVydGll
cy5jbGVhcigpOwogCkBAIC04MTcsNyArODE3LDcgQEAgdm9pZCBTdHlsZVByb3BlcnR5U2V0Ojpt
ZXJnZShjb25zdCBTdHlsZQogICAgIH0KIH0KIAotdm9pZCBTdHlsZVByb3BlcnR5U2V0OjphZGRT
dWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscywgU3R5bGVTaGVldElu
dGVybmFsKiBjb250ZXh0U3R5bGVTaGVldCkKK3ZvaWQgU3R5bGVQcm9wZXJ0eVNldDo6YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMsIFN0eWxlU2hlZXRDb250
ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgc2l6ZV90IHNpemUgPSBtX3Byb3BlcnRp
ZXMuc2l6ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydHlTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCShyZXZpc2lvbiAxMTgxODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVQcm9wZXJ0eVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw3ICszNyw3IEBAIGNsYXNzIEtVUkw7CiBjbGFzcyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb247CiBjbGFzcyBTdHlsZWRFbGVtZW50OwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFu
ZDsKLWNsYXNzIFN0eWxlU2hlZXRJbnRlcm5hbDsKK2NsYXNzIFN0eWxlU2hlZXRDb250ZW50czsK
IAogdHlwZWRlZiBWZWN0b3I8Q1NTUHJvcGVydHksIDQ+IFN0eWxlUHJvcGVydHlWZWN0b3I7CiAK
QEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNQcm9wZXJ0eUltcGxpY2l0KENT
U1Byb3BlcnR5SUQpIGNvbnN0OwogCiAgICAgLy8gVGhlc2UgZXhwYW5kIHNob3J0aGFuZCBwcm9w
ZXJ0aWVzIGludG8gbXVsdGlwbGUgcHJvcGVydGllcy4KLSAgICBib29sIHNldFByb3BlcnR5KENT
U1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2Us
IFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxlU2hlZXQgPSAwKTsKKyAgICBib29sIHNl
dFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0
YW50ID0gZmFsc2UsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQgPSAwKTsK
ICAgICB2b2lkIHNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
LCBib29sIGltcG9ydGFudCA9IGZhbHNlKTsKIAogICAgIC8vIFRoZXNlIGRvIG5vdC4gRklYTUU6
IFRoaXMgaXMgdG9vIG1lc3N5LCB3ZSBjYW4gZG8gYmV0dGVyLgpAQCAtNzYsNyArNzYsNyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgYm9vbCByZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBTdHJp
bmcqIHJldHVyblRleHQgPSAwKTsKIAotICAgIHZvaWQgcGFyc2VEZWNsYXJhdGlvbihjb25zdCBT
dHJpbmcmIHN0eWxlRGVjbGFyYXRpb24sIFN0eWxlU2hlZXRJbnRlcm5hbCogY29udGV4dFN0eWxl
U2hlZXQpOworICAgIHZvaWQgcGFyc2VEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmIHN0eWxlRGVj
bGFyYXRpb24sIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwogCiAgICAg
dm9pZCBhZGRQYXJzZWRQcm9wZXJ0aWVzKGNvbnN0IFZlY3RvcjxDU1NQcm9wZXJ0eT4mKTsKICAg
ICB2b2lkIGFkZFBhcnNlZFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5Jik7CkBAIC05MCw3ICs5
MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldENTU1BhcnNlck1vZGUoQ1NTUGFyc2VyTW9kZSBj
c3NQYXJzZXJNb2RlKSB7IG1fY3NzUGFyc2VyTW9kZSA9IGNzc1BhcnNlck1vZGU7IH0KICAgICBD
U1NQYXJzZXJNb2RlIGNzc1BhcnNlck1vZGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxD
U1NQYXJzZXJNb2RlPihtX2Nzc1BhcnNlck1vZGUpOyB9CiAKLSAgICB2b2lkIGFkZFN1YnJlc291
cmNlU3R5bGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiwgU3R5bGVTaGVldEludGVybmFsKiBjb250
ZXh0U3R5bGVTaGVldCk7CisgICAgdm9pZCBhZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyhMaXN0SGFz
aFNldDxLVVJMPiYsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwogCiAg
ICAgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3Q7CiAgICAgLy8gVXNl
ZCBieSBTdHlsZWRFbGVtZW50Ojpjb3B5Tm9uQXR0cmlidXRlUHJvcGVydGllcygpLgpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAkocmV2aXNpb24gMTE4MTg0KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzks
NyArMjM5LDcgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0lt
cGwqLCBPd25QdHI8VmVjdG9yPFJ1bGVEYXRhPiA+ID4gQXRvbVJ1bGVNYXA7CiAKLSAgICB2b2lk
IGFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRJbnRlcm5hbCosIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImLCBTdHlsZVJlc29sdmVyKiA9IDAsIGNvbnN0IENvbnRhaW5lck5vZGUqID0gMCk7
CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMqLCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgU3R5bGVSZXNvbHZlciogPSAwLCBjb25zdCBDb250YWluZXJO
b2RlKiA9IDApOwogCiAgICAgdm9pZCBhZGRTdHlsZVJ1bGUoU3R5bGVSdWxlKiwgYm9vbCBoYXNE
b2N1bWVudFNlY3VyaXR5T3JpZ2luLCBib29sIGNhblVzZUZhc3RDaGVja1NlbGVjdG9yLCBib29s
IGlzSW5SZWdpb25SdWxlID0gZmFsc2UpOwogICAgIHZvaWQgYWRkUnVsZShTdHlsZVJ1bGUqLCBD
U1NTZWxlY3RvciosIGJvb2wgaGFzRG9jdW1lbnRTZWN1cml0eU9yaWdpbiwgYm9vbCBjYW5Vc2VG
YXN0Q2hlY2tTZWxlY3RvciwgYm9vbCBpc0luUmVnaW9uUnVsZSA9IGZhbHNlKTsKQEAgLTI4OSwx
MyArMjg5LDEzIEBAIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgUnVsZVNl
dCogZGVmYXVsdFF1aXJrc1N0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxl
Owogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7Ci1zdGF0aWMgU3R5bGVT
aGVldEludGVybmFsKiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKLXN0YXRpYyBTdHlsZVNoZWV0
SW50ZXJuYWwqIGRlZmF1bHRTdHlsZVNoZWV0Owotc3RhdGljIFN0eWxlU2hlZXRJbnRlcm5hbCog
cXVpcmtzU3R5bGVTaGVldDsKLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHN2Z1N0eWxlU2hl
ZXQ7Ci1zdGF0aWMgU3R5bGVTaGVldEludGVybmFsKiBtYXRoTUxTdHlsZVNoZWV0Owotc3RhdGlj
IFN0eWxlU2hlZXRJbnRlcm5hbCogbWVkaWFDb250cm9sc1N0eWxlU2hlZXQ7Ci1zdGF0aWMgU3R5
bGVTaGVldEludGVybmFsKiBmdWxsc2NyZWVuU3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNoZWV0
Q29udGVudHMqIHNpbXBsZURlZmF1bHRTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRDb250
ZW50cyogZGVmYXVsdFN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5bGVTaGVldENvbnRlbnRzKiBxdWly
a3NTdHlsZVNoZWV0Oworc3RhdGljIFN0eWxlU2hlZXRDb250ZW50cyogc3ZnU3R5bGVTaGVldDsK
K3N0YXRpYyBTdHlsZVNoZWV0Q29udGVudHMqIG1hdGhNTFN0eWxlU2hlZXQ7CitzdGF0aWMgU3R5
bGVTaGVldENvbnRlbnRzKiBtZWRpYUNvbnRyb2xzU3R5bGVTaGVldDsKK3N0YXRpYyBTdHlsZVNo
ZWV0Q29udGVudHMqIGZ1bGxzY3JlZW5TdHlsZVNoZWV0OwogCiBSZW5kZXJTdHlsZSogU3R5bGVS
ZXNvbHZlcjo6c19zdHlsZU5vdFlldEF2YWlsYWJsZTsKIApAQCAtNDAzLDcgKzQwMyw3IEBAIFN0
eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQqIGQKICAgICAvLyBGSVhNRTogVGhp
cyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEKICAgICBPd25Q
dHI8UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9IFJ1bGVTZXQ6OmNyZWF0ZSgpOwogICAgIGlmIChD
U1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0ID0gZG9jdW1lbnQtPnBhZ2VVc2VyU2hlZXQoKSkK
LSAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldC0+
aW50ZXJuYWwoKSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQocGFnZVVzZXJTaGVldC0+Y29udGVudHMoKSwgKm1fbWVkaXVtLCB0aGlz
KTsKICAgICBhZGRBdXRob3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGRvY3Vt
ZW50LT5wYWdlR3JvdXBVc2VyU2hlZXRzKCksICp0ZW1wVXNlclN0eWxlKTsKICAgICBhZGRBdXRo
b3JSdWxlc0FuZENvbGxlY3RVc2VyUnVsZXNGcm9tU2hlZXRzKGRvY3VtZW50LT5kb2N1bWVudFVz
ZXJTaGVldHMoKSwgKnRlbXBVc2VyU3R5bGUpOwogICAgIGlmICh0ZW1wVXNlclN0eWxlLT5tX3J1
bGVDb3VudCA+IDAgfHwgdGVtcFVzZXJTdHlsZS0+bV9wYWdlUnVsZXMuc2l6ZSgpID4gMCkKQEAg
LTQ0NCw3ICs0NDQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZEF1dGhvclJ1bGVzQW5kQ29s
CiAKICAgICB1bnNpZ25lZCBsZW5ndGggPSB1c2VyU2hlZXRzLT5zaXplKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0gICAgICAgIFN0eWxlU2hlZXRJbnRl
cm5hbCogc2hlZXQgPSB1c2VyU2hlZXRzLT5hdChpKS0+aW50ZXJuYWwoKTsKKyAgICAgICAgU3R5
bGVTaGVldENvbnRlbnRzKiBzaGVldCA9IHVzZXJTaGVldHMtPmF0KGkpLT5jb250ZW50cygpOwog
ICAgICAgICBpZiAoc2hlZXQtPmlzVXNlclN0eWxlU2hlZXQoKSkKICAgICAgICAgICAgIHVzZXJT
dHlsZS5hZGRSdWxlc0Zyb21TaGVldChzaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAgICAg
ZWxzZQpAQCAtNTI4LDcgKzUyOCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9y
U3R5bGVzaGUKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoY3NzU2hlZXQtPm1l
ZGlhUXVlcmllcygpICYmICFtX21lZGl1bS0+ZXZhbChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCks
IHRoaXMpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFN0eWxlU2hlZXRJbnRlcm5h
bCogc2hlZXQgPSBjc3NTaGVldC0+aW50ZXJuYWwoKTsKKyAgICAgICAgU3R5bGVTaGVldENvbnRl
bnRzKiBzaGVldCA9IGNzc1NoZWV0LT5jb250ZW50cygpOwogI2lmIEVOQUJMRShTVFlMRV9TQ09Q
RUQpCiAgICAgICAgIGNvbnN0IENvbnRhaW5lck5vZGUqIHNjb3BlID0gZGV0ZXJtaW5lU2NvcGUo
Y3NzU2hlZXQpOwogICAgICAgICBpZiAoc2NvcGUpIHsKQEAgLTcwNSwxNCArNzA1LDE0IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6RmVhdHVyZXM6OmNsZWFyKCkKICAgICB1c2VzTGlua1J1bGVzID0g
ZmFsc2U7CiB9CiAKLXN0YXRpYyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25z
dCBTdHJpbmcmIHN0cikKK3N0YXRpYyBTdHlsZVNoZWV0Q29udGVudHMqIHBhcnNlVUFTaGVldChj
b25zdCBTdHJpbmcmIHN0cikKIHsKLSAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIHNoZWV0ID0gU3R5
bGVTaGVldEludGVybmFsOjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9u
IHB1cnBvc2UKKyAgICBTdHlsZVNoZWV0Q29udGVudHMqIHNoZWV0ID0gU3R5bGVTaGVldENvbnRl
bnRzOjpjcmVhdGUoKS5sZWFrUmVmKCk7IC8vIGxlYWsgdGhlIHNoZWV0IG9uIHB1cnBvc2UKICAg
ICBzaGVldC0+cGFyc2VTdHJpbmcoc3RyKTsKICAgICByZXR1cm4gc2hlZXQ7CiB9CiAKLXN0YXRp
YyBTdHlsZVNoZWV0SW50ZXJuYWwqIHBhcnNlVUFTaGVldChjb25zdCBjaGFyKiBjaGFyYWN0ZXJz
LCB1bnNpZ25lZCBzaXplKQorc3RhdGljIFN0eWxlU2hlZXRDb250ZW50cyogcGFyc2VVQVNoZWV0
KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNpemUpCiB7CiAgICAgcmV0dXJuIHBh
cnNlVUFTaGVldChTdHJpbmcoY2hhcmFjdGVycywgc2l6ZSkpOwogfQpAQCAtMjI4NSw3ICsyMjg1
LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVyOjpjaGVja1JlZ2lvblNlbGVjdG9yKAogICAgIHJldHVy
biBmYWxzZTsKIH0KICAgICAKLWJvb2wgU3R5bGVSZXNvbHZlcjo6ZGV0ZXJtaW5lU3R5bGVzaGVl
dFNlbGVjdG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVzaGVldCwgSGFzaFNldDxB
dG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiYg
Y2xhc3NTY29wZXMpCitib29sIFN0eWxlUmVzb2x2ZXI6OmRldGVybWluZVN0eWxlc2hlZXRTZWxl
Y3RvclNjb3BlcyhTdHlsZVNoZWV0Q29udGVudHMqIHN0eWxlc2hlZXQsIEhhc2hTZXQ8QXRvbWlj
U3RyaW5nSW1wbCo+JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNz
U2NvcGVzKQogewogICAgIEFTU0VSVCghc3R5bGVzaGVldC0+aXNMb2FkaW5nKCkpOwogCkBAIC0y
NTExLDcgKzI1MTEsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJlZ2lvblJ1bGUoU3R5bGVSdWxlUmVn
CiAgICAgbV9yZWdpb25TZWxlY3RvcnNBbmRSdWxlU2V0cy5hcHBlbmQoUnVsZVNldFNlbGVjdG9y
UGFpcihyZWdpb25SdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpLCByZWdpb25SdWxlU2V0LnJl
bGVhc2UoKSkpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hl
ZXRJbnRlcm5hbCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5
bGVSZXNvbHZlciogc3R5bGVTZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCit2
b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRDb250ZW50cyogc2hlZXQs
IGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVSZXNvbHZlciogc3R5bGVT
ZWxlY3RvciwgY29uc3QgQ29udGFpbmVyTm9kZSogc2NvcGUpCiB7CiAgICAgQVNTRVJUKHNoZWV0
KTsKICAgICAKQEAgLTI5NDcsNyArMjk0Nyw3IEBAIHN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdy
YXBwZXJzKEhhc2hNYXAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNvbGxlY3RDU1NPTVdyYXBw
ZXJzKEhhc2hNYXA8U3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiYgd3JhcHBlck1h
cCwgSGFzaFNldDxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiYgc2hlZXRXcmFwcGVyU2V0LCBTdHls
ZVNoZWV0SW50ZXJuYWwqIHN0eWxlU2hlZXQpCitzdGF0aWMgdm9pZCBjb2xsZWN0Q1NTT01XcmFw
cGVycyhIYXNoTWFwPFN0eWxlUnVsZSosIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4mIHdyYXBwZXJN
YXAsIEhhc2hTZXQ8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4mIHNoZWV0V3JhcHBlclNldCwgU3R5
bGVTaGVldENvbnRlbnRzKiBzdHlsZVNoZWV0KQogewogICAgIGlmICghc3R5bGVTaGVldCkKICAg
ICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCShyZXZpc2lv
biAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC04MCw3ICs4MCw3IEBAIGNsYXNzIFN0eWxlUnVsZVBhZ2U7CiBjbGFzcyBTdHls
ZVJ1bGVSZWdpb247CiBjbGFzcyBTdHlsZVNoYWRlcjsKIGNsYXNzIFN0eWxlU2hlZXQ7Ci1jbGFz
cyBTdHlsZVNoZWV0SW50ZXJuYWw7CitjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiBjbGFzcyBT
dHlsZVNoZWV0TGlzdDsKIGNsYXNzIFN0eWxlZEVsZW1lbnQ7CiBjbGFzcyBXZWJLaXRDU1NGaWx0
ZXJWYWx1ZTsKQEAgLTE1OCw3ICsxNTgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBlbmRBdXRo
b3JTdHlsZXNoZWV0cyh1bnNpZ25lZCBmaXJzdE5ldywgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHls
ZVNoZWV0PiA+Jik7CiAgICAgCiAgICAgLy8gRmluZCB0aGUgaWRzIG9yIGNsYXNzZXMgdGhlIHNl
bGVjdG9ycyBvbiBhIHN0eWxlc2hlZXQgYXJlIHNjb3BlZCB0by4gVGhlIHNlbGVjdG9ycyBvbmx5
IGFwcGx5IHRvIGVsZW1lbnRzIGluIHN1YnRyZWVzIHdoZXJlIHRoZSByb290IGVsZW1lbnQgbWF0
Y2hlcyB0aGUgc2NvcGUuCi0gICAgc3RhdGljIGJvb2wgZGV0ZXJtaW5lU3R5bGVzaGVldFNlbGVj
dG9yU2NvcGVzKFN0eWxlU2hlZXRJbnRlcm5hbCosIEhhc2hTZXQ8QXRvbWljU3RyaW5nSW1wbCo+
JiBpZFNjb3BlcywgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGNsYXNzU2NvcGVzKTsKKyAg
ICBzdGF0aWMgYm9vbCBkZXRlcm1pbmVTdHlsZXNoZWV0U2VsZWN0b3JTY29wZXMoU3R5bGVTaGVl
dENvbnRlbnRzKiwgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4mIGlkU2NvcGVzLCBIYXNoU2V0
PEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NTY29wZXMpOwogCiBwcml2YXRlOgogICAgIHZvaWQg
aW5pdEZvclN0eWxlUmVzb2x2ZShFbGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0g
MCwgUHNldWRvSWQgPSBOT1BTRVVETyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU0tleWZyYW1lc1J1bGUuY3BwCShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Niw3ICsxMTYsNyBAQCB2b2lkIFdlYktpdENTU0tleWZyYW1lc1J1bGU6Omluc2VydFJ1bGUoCiAK
ICAgICBDU1NQYXJzZXIgcGFyc2VyKHBhcnNlckNvbnRleHQoKSk7CiAgICAgQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKTsKLSAgICBSZWZQdHI8U3R5bGVLZXlm
cmFtZT4ga2V5ZnJhbWUgPSBwYXJzZXIucGFyc2VLZXlmcmFtZVJ1bGUoc3R5bGVTaGVldCA/IHN0
eWxlU2hlZXQtPmludGVybmFsKCkgOiAwLCBydWxlVGV4dCk7CisgICAgUmVmUHRyPFN0eWxlS2V5
ZnJhbWU+IGtleWZyYW1lID0gcGFyc2VyLnBhcnNlS2V5ZnJhbWVSdWxlKHN0eWxlU2hlZXQgPyBz
dHlsZVNoZWV0LT5jb250ZW50cygpIDogMCwgcnVsZVRleHQpOwogICAgIGlmICgha2V5ZnJhbWUp
CiAgICAgICAgIHJldHVybjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RPTUltcGxlbWVu
dGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50
YXRpb24uY3BwCShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRE9NSW1w
bGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsNyArMzI1LDcgQEAgUGFzc1Jl
ZlB0cjxDU1NTdHlsZVNoZWV0PiBET01JbXBsZW1lbnRhdAogewogICAgIC8vIEZJWE1FOiBUaXRs
ZSBzaG91bGQgYmUgc2V0LgogICAgIC8vIEZJWE1FOiBNZWRpYSBjb3VsZCBoYXZlIHdyb25nIHN5
bnRheCwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgZ2VuZXJhdGUgYW4gZXhjZXB0aW9uLgotICAg
IFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBzaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShTdHls
ZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZSgpKTsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gc2hl
ZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoKSk7
CiAgICAgc2hlZXQtPnNldE1lZGlhUXVlcmllcyhNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2lu
Z0Rlc2NyaXB0aW9uU3ludGF4KG1lZGlhKSk7CiAgICAgcmV0dXJuIHNoZWV0OwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzI1LDcgKzE3MjUsNyBAQCB2
b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjCiAKICAgICBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgY29va2llID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3
aWxsUmVjYWxjdWxhdGVTdHlsZSh0aGlzKTsKIAotICAgIGlmIChtX2VsZW1TaGVldCAmJiBtX2Vs
ZW1TaGVldC0+aW50ZXJuYWwoKS0+dXNlc1JlbVVuaXRzKCkpCisgICAgaWYgKG1fZWxlbVNoZWV0
ICYmIG1fZWxlbVNoZWV0LT5jb250ZW50cygpLT51c2VzUmVtVW5pdHMoKSkKICAgICAgICAgbV91
c2VzUmVtVW5pdHMgPSB0cnVlOwogCiAgICAgbV9pblN0eWxlUmVjYWxjID0gdHJ1ZTsKQEAgLTI2
NDYsMTEgKzI2NDYsMTEgQEAgdm9pZCBEb2N1bWVudDo6dXBkYXRlQmFzZVVSTCgpCiAKICAgICBp
ZiAobV9lbGVtU2hlZXQpIHsKICAgICAgICAgLy8gRWxlbWVudCBzaGVldCBpcyBzaWxseS4gSXQg
bmV2ZXIgY29udGFpbnMgYW55dGhpbmcuCi0gICAgICAgIEFTU0VSVCghbV9lbGVtU2hlZXQtPmlu
dGVybmFsKCktPnJ1bGVDb3VudCgpKTsKLSAgICAgICAgYm9vbCB1c2VzUmVtVW5pdHMgPSBtX2Vs
ZW1TaGVldC0+aW50ZXJuYWwoKS0+dXNlc1JlbVVuaXRzKCk7CisgICAgICAgIEFTU0VSVCghbV9l
bGVtU2hlZXQtPmNvbnRlbnRzKCktPnJ1bGVDb3VudCgpKTsKKyAgICAgICAgYm9vbCB1c2VzUmVt
VW5pdHMgPSBtX2VsZW1TaGVldC0+Y29udGVudHMoKS0+dXNlc1JlbVVuaXRzKCk7CiAgICAgICAg
IG1fZWxlbVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKHRoaXMsIG1fYmFzZVVS
TCk7CiAgICAgICAgIC8vIEZJWE1FOiBTbyB3ZSBhcmUgbm90IHJlYWxseSB0aGUgcGFyc2VyLiBU
aGUgcmlnaHQgZml4IGlzIHRvIGVsaW1pbmF0ZSB0aGUgZWxlbWVudCBzaGVldCBjb21wbGV0ZWx5
LgotICAgICAgICBtX2VsZW1TaGVldC0+aW50ZXJuYWwoKS0+cGFyc2VyU2V0VXNlc1JlbVVuaXRz
KHVzZXNSZW1Vbml0cyk7CisgICAgICAgIG1fZWxlbVNoZWV0LT5jb250ZW50cygpLT5wYXJzZXJT
ZXRVc2VzUmVtVW5pdHModXNlc1JlbVVuaXRzKTsKICAgICB9CiAKICAgICBpZiAoIWVxdWFsSWdu
b3JpbmdGcmFnbWVudElkZW50aWZpZXIob2xkQmFzZVVSTCwgbV9iYXNlVVJMKSkgewpAQCAtMjgw
Miw4ICsyODAyLDggQEAgQ1NTU3R5bGVTaGVldCogRG9jdW1lbnQ6OnBhZ2VVc2VyU2hlZXQoKQog
ICAgIAogICAgIC8vIFBhcnNlIHRoZSBzaGVldCBhbmQgY2FjaGUgaXQuCiAgICAgbV9wYWdlVXNl
clNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlSW5saW5lKHRoaXMsIHNldHRpbmdzKCktPnVz
ZXJTdHlsZVNoZWV0TG9jYXRpb24oKSk7Ci0gICAgbV9wYWdlVXNlclNoZWV0LT5pbnRlcm5hbCgp
LT5zZXRJc1VzZXJTdHlsZVNoZWV0KHRydWUpOwotICAgIG1fcGFnZVVzZXJTaGVldC0+aW50ZXJu
YWwoKS0+cGFyc2VTdHJpbmcodXNlclNoZWV0VGV4dCk7CisgICAgbV9wYWdlVXNlclNoZWV0LT5j
b250ZW50cygpLT5zZXRJc1VzZXJTdHlsZVNoZWV0KHRydWUpOworICAgIG1fcGFnZVVzZXJTaGVl
dC0+Y29udGVudHMoKS0+cGFyc2VTdHJpbmcodXNlclNoZWV0VGV4dCk7CiAgICAgcmV0dXJuIG1f
cGFnZVVzZXJTaGVldC5nZXQoKTsKIH0KIApAQCAtMjg1MSw4ICsyODUxLDggQEAgY29uc3QgVmVj
dG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBEbwogICAgICAgICAgICAgaWYgKCFtX3BhZ2VH
cm91cFVzZXJTaGVldHMpCiAgICAgICAgICAgICAgICAgbV9wYWdlR3JvdXBVc2VyU2hlZXRzID0g
YWRvcHRQdHIobmV3IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPik7CiAgICAgICAgICAg
ICBtX3BhZ2VHcm91cFVzZXJTaGVldHMtPmFwcGVuZChncm91cFNoZWV0KTsKLSAgICAgICAgICAg
IGdyb3VwU2hlZXQtPmludGVybmFsKCktPnNldElzVXNlclN0eWxlU2hlZXQoc2hlZXQtPmxldmVs
KCkgPT0gVXNlclN0eWxlVXNlckxldmVsKTsKLSAgICAgICAgICAgIGdyb3VwU2hlZXQtPmludGVy
bmFsKCktPnBhcnNlU3RyaW5nKHNoZWV0LT5zb3VyY2UoKSk7CisgICAgICAgICAgICBncm91cFNo
ZWV0LT5jb250ZW50cygpLT5zZXRJc1VzZXJTdHlsZVNoZWV0KHNoZWV0LT5sZXZlbCgpID09IFVz
ZXJTdHlsZVVzZXJMZXZlbCk7CisgICAgICAgICAgICBncm91cFNoZWV0LT5jb250ZW50cygpLT5w
YXJzZVN0cmluZyhzaGVldC0+c291cmNlKCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yODc1
LDcgKzI4NzUsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVQYWdlR3JvdXBVc2VyU2hlZXRzCiAg
ICAgICAgIHN0eWxlUmVzb2x2ZXJDaGFuZ2VkKFJlY2FsY1N0eWxlSW1tZWRpYXRlbHkpOwogfQog
Ci12b2lkIERvY3VtZW50OjphZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJu
YWw+IHVzZXJTaGVldCkKK3ZvaWQgRG9jdW1lbnQ6OmFkZFVzZXJTaGVldChQYXNzUmVmUHRyPFN0
eWxlU2hlZXRDb250ZW50cz4gdXNlclNoZWV0KQogewogICAgIGlmICghbV91c2VyU2hlZXRzKQog
ICAgICAgICBtX3VzZXJTaGVldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFJlZlB0cjxDU1NTdHls
ZVNoZWV0PiA+KTsKQEAgLTM0MjgsNyArMzQyOCw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNvbGxlY3RB
Y3RpdmVTdHlsZXNoZWV0cygKICAgICB9CiB9CiAKLWJvb2wgRG9jdW1lbnQ6OnRlc3RBZGRlZFN0
eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxjKFN0eWxlU2hlZXRJbnRlcm5hbCogc3R5bGVzaGVl
dCkKK2Jvb2wgRG9jdW1lbnQ6OnRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVjYWxj
KFN0eWxlU2hlZXRDb250ZW50cyogc3R5bGVzaGVldCkKIHsKICAgICAvLyBTZWUgaWYgYWxsIHJ1
bGVzIG9uIHRoZSBzaGVldCBhcmUgc2NvcGVkIHRvIHNvbWUgc3BlY2lmaWMgaWRzIG9yIGNsYXNz
ZXMuCiAgICAgLy8gVGhlbiB0ZXN0IGlmIHdlIGFjdHVhbGx5IGhhdmUgYW55IG9mIHRob3NlIGlu
IHRoZSB0cmVlIGF0IHRoZSBtb21lbnQuCkBAIC0zNDk2LDcgKzM0OTYsNyBAQCB2b2lkIERvY3Vt
ZW50OjphbmFseXplU3R5bGVzaGVldENoYW5nZShTCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGlmIChuZXdTdHlsZXNoZWV0c1tpXS0+ZGlzYWJsZWQoKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAodGVzdEFkZGVkU3R5bGVzaGVldFJlcXVpcmVzU3R5bGVSZWNhbGMo
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KG5ld1N0eWxlc2hlZXRzW2ldLmdldCgpKS0+aW50
ZXJuYWwoKSkpCisgICAgICAgIGlmICh0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJl
Y2FsYyhzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4obmV3U3R5bGVzaGVldHNbaV0uZ2V0KCkp
LT5jb250ZW50cygpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgcmVxdWlyZXNG
dWxsU3R5bGVSZWNhbGMgPSBmYWxzZTsKQEAgLTM1MDcsNyArMzUwNyw3IEBAIHN0YXRpYyBib29s
IHN0eWxlU2hlZXRzVXNlUmVtVW5pdHMoY29uc3QKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2hlZXRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICghc2hlZXRzW2ldLT5pc0NTU1N0
eWxlU2hlZXQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0c1tpXS5nZXQoKSktPmludGVybmFsKCktPnVzZXNSZW1V
bml0cygpKQorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0c1tp
XS5nZXQoKSktPmNvbnRlbnRzKCktPnVzZXNSZW1Vbml0cygpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIGNsYXNzIFNlZ21lbnRlZFN0cmluZzsKIGNs
YXNzIFNldHRpbmdzOwogY2xhc3MgU3R5bGVSZXNvbHZlcjsKIGNsYXNzIFN0eWxlU2hlZXQ7Ci1j
bGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CitjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7CiBjbGFz
cyBTdHlsZVNoZWV0TGlzdDsKIGNsYXNzIFRleHQ7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVy
OwpAQCAtNjU1LDcgKzY1NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZVBhZ2VHcm91cFVz
ZXJTaGVldHMoKTsKIAogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiog
ZG9jdW1lbnRVc2VyU2hlZXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VyU2hlZXRzLmdldCgpOyB9
Ci0gICAgdm9pZCBhZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHVz
ZXJTaGVldCk7CisgICAgdm9pZCBhZGRVc2VyU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29u
dGVudHM+IHVzZXJTaGVldCk7CiAKICAgICBDU1NTdHlsZVNoZWV0KiBlbGVtZW50U2hlZXQoKTsK
ICAgICAKQEAgLTEyMDksNyArMTIwOSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgYm9vbCB1cGRh
dGVBY3RpdmVTdHlsZXNoZWV0cyhTdHlsZVJlc29sdmVyVXBkYXRlRmxhZyk7CiAgICAgdm9pZCBj
b2xsZWN0QWN0aXZlU3R5bGVzaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVNoZWV0PiA+Jik7Ci0g
ICAgYm9vbCB0ZXN0QWRkZWRTdHlsZXNoZWV0UmVxdWlyZXNTdHlsZVJlY2FsYyhTdHlsZVNoZWV0
SW50ZXJuYWwqKTsKKyAgICBib29sIHRlc3RBZGRlZFN0eWxlc2hlZXRSZXF1aXJlc1N0eWxlUmVj
YWxjKFN0eWxlU2hlZXRDb250ZW50cyopOwogICAgIHZvaWQgYW5hbHl6ZVN0eWxlc2hlZXRDaGFu
Z2UoU3R5bGVSZXNvbHZlclVwZGF0ZUZsYWcsIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVTaGVl
dD4gPiYgbmV3U3R5bGVzaGVldHMsIGJvb2wmIHJlcXVpcmVzU3R5bGVSZXNvbHZlclJlc2V0LCBi
b29sJiByZXF1aXJlc0Z1bGxTdHlsZVJlY2FsYyk7CiAKICAgICB2b2lkIHNlYW1sZXNzUGFyZW50
VXBkYXRlZFN0eWxlc2hlZXRzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0
dHJpYnV0ZURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
QXR0cmlidXRlRGF0YS5jcHAJKHJldmlzaW9uIDExODE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw3ICsxNjEs
NyBAQCB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp1cGRhdGVJbmxpbmVTCiAgICAgICAgIG1f
aW5saW5lU3R5bGVEZWNsID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgICAgIG1f
aW5saW5lU3R5bGVEZWNsLT5zZXRDU1NQYXJzZXJNb2RlKHN0cmljdFRvQ1NTUGFyc2VyTW9kZShl
bGVtZW50LT5pc0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnQtPmRvY3VtZW50KCktPmluUXVpcmtz
TW9kZSgpKSk7CiAgICAgfQotICAgIG1faW5saW5lU3R5bGVEZWNsLT5wYXJzZURlY2xhcmF0aW9u
KHRleHQsIGVsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsK
KyAgICBtX2lubGluZVN0eWxlRGVjbC0+cGFyc2VEZWNsYXJhdGlvbih0ZXh0LCBlbGVtZW50LT5k
b2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+Y29udGVudHMoKSk7CiB9CiAKIHZvaWQgRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmRlc3Ryb3lJbmxpbmVTdHlsZShTdHlsZWRFbGVtZW50KiBlbGVtZW50
KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJ
KHJldmlzaW9uIDExODE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb246OnNldENTU1N0eWxlUwogICAgIEFTU0VSVChtX2lzQ1NTKTsKICAgICBD
U1NQYXJzZXJDb250ZXh0IHBhcnNlckNvbnRleHQoZG9jdW1lbnQoKSwgYmFzZVVSTCwgY2hhcnNl
dCk7CiAKLSAgICBSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBuZXdTaGVldCA9IFN0eWxlU2hl
ZXRJbnRlcm5hbDo6Y3JlYXRlKGhyZWYsIGJhc2VVUkwsIHBhcnNlckNvbnRleHQpOworICAgIFJl
ZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+IG5ld1NoZWV0ID0gU3R5bGVTaGVldENvbnRlbnRzOjpj
cmVhdGUoaHJlZiwgYmFzZVVSTCwgcGFyc2VyQ29udGV4dCk7CiAKICAgICBSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gY3NzU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUobmV3U2hlZXQsIHRoaXMp
OwogICAgIGNzc1NoZWV0LT5zZXREaXNhYmxlZChtX2FsdGVybmF0ZSk7CkBAIC0yNDAsNyArMjQw
LDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OnNldFhTTFN0eWxlUwogdm9pZCBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb246OnBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHNoZWV0KQog
ewogICAgIGlmIChtX2lzQ1NTKQotICAgICAgICBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4o
bV9zaGVldC5nZXQoKSktPmludGVybmFsKCktPnBhcnNlU3RyaW5nKHNoZWV0KTsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5jb250ZW50cygpLT5w
YXJzZVN0cmluZyhzaGVldCk7CiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgZWxzZSBpZiAobV9pc1hT
TCkKICAgICAgICAgc3RhdGljX2Nhc3Q8WFNMU3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5w
YXJzZVN0cmluZyhzaGVldCk7CkBAIC0yNTMsNyArMjUzLDcgQEAgdm9pZCBQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb246OnBhcnNlU3R5bGVTaAogICAgIG1fbG9hZGluZyA9IGZhbHNlOwogCiAgICAgaWYg
KG1faXNDU1MpCi0gICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihtX3NoZWV0Lmdl
dCgpKS0+aW50ZXJuYWwoKS0+Y2hlY2tMb2FkZWQoKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldCo+KG1fc2hlZXQuZ2V0KCkpLT5jb250ZW50cygpLT5jaGVja0xvYWRlZCgpOwog
I2lmIEVOQUJMRShYU0xUKQogICAgIGVsc2UgaWYgKG1faXNYU0wpCiAgICAgICAgIHN0YXRpY19j
YXN0PFhTTFN0eWxlU2hlZXQqPihtX3NoZWV0LmdldCgpKS0+Y2hlY2tMb2FkZWQoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2RvbS9TdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDE0
ICsxNzMsMTQgQEAgdm9pZCBTdHlsZUVsZW1lbnQ6OmNyZWF0ZVNoZWV0KEVsZW1lbnQqIAogICAg
ICAgICAgICAgbV9zaGVldC0+c2V0TWVkaWFRdWVyaWVzKG1lZGlhUXVlcmllcy5yZWxlYXNlKCkp
OwogICAgICAgICAgICAgbV9zaGVldC0+c2V0VGl0bGUoZS0+dGl0bGUoKSk7CiAgICAgCi0gICAg
ICAgICAgICBtX3NoZWV0LT5pbnRlcm5hbCgpLT5wYXJzZVN0cmluZ0F0TGluZSh0ZXh0LCBzdGFy
dExpbmVOdW1iZXIpOworICAgICAgICAgICAgbV9zaGVldC0+Y29udGVudHMoKS0+cGFyc2VTdHJp
bmdBdExpbmUodGV4dCwgc3RhcnRMaW5lTnVtYmVyKTsKIAogICAgICAgICAgICAgbV9sb2FkaW5n
ID0gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobV9zaGVldCkKLSAgICAgICAg
bV9zaGVldC0+aW50ZXJuYWwoKS0+Y2hlY2tMb2FkZWQoKTsKKyAgICAgICAgbV9zaGVldC0+Y29u
dGVudHMoKS0+Y2hlY2tMb2FkZWQoKTsKIH0KIAogYm9vbCBTdHlsZUVsZW1lbnQ6OmlzTG9hZGlu
ZygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxMTgxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCBib29sIFN0eWxlZEVsZW1lbnQ6OnNldElubGlu
ZVN0eWxlUHJvcGVyCiAKIGJvb2wgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVQcm9wZXJ0
eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50KQogewotICAgIGJvb2wgY2hhbmdlcyA9IGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+ZW5z
dXJlTXV0YWJsZUlubGluZVN0eWxlKHRoaXMpLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1
ZSwgaW1wb3J0YW50LCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+aW50ZXJuYWwoKSk7Cisg
ICAgYm9vbCBjaGFuZ2VzID0gZW5zdXJlQXR0cmlidXRlRGF0YSgpLT5lbnN1cmVNdXRhYmxlSW5s
aW5lU3R5bGUodGhpcyktPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQs
IGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5jb250ZW50cygpKTsKICAgICBpZiAoY2hhbmdl
cykKICAgICAgICAgaW5saW5lU3R5bGVDaGFuZ2VkKCk7CiAgICAgcmV0dXJuIGNoYW5nZXM7CkBA
IC0yMzIsNyArMjMyLDcgQEAgYm9vbCBTdHlsZWRFbGVtZW50OjpyZW1vdmVJbmxpbmVTdHlsZVBy
bwogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhh
c2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7CiAgICAgaWYgKFN0eWxlUHJvcGVydHlTZXQqIGlu
bGluZVN0eWxlID0gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHls
ZSgpIDogMCkKLSAgICAgICAgaW5saW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVy
bHMsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKKyAgICAgICAgaW5s
aW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIGRvY3VtZW50KCktPmVsZW1l
bnRTaGVldCgpLT5jb250ZW50cygpKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGF0dHJpYnV0
ZU5hbWVTb3J0KGNvbnN0IHBhaXI8QXRvbWljU3RyaW5nSW1wbCosIEF0b21pY1N0cmluZz4mIHAx
LCBjb25zdCBwYWlyPEF0b21pY1N0cmluZ0ltcGwqLCBBdG9taWNTdHJpbmc+JiBwMikKQEAgLTM0
Miw3ICszNDIsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1CiAg
ICAgCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFByb3BlcnR5VG9BdHRyaWJ1dGVTdHlsZShTdHls
ZVByb3BlcnR5U2V0KiBzdHlsZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBTdHJp
bmcmIHZhbHVlKQogewotICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwg
ZmFsc2UsIGRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRlcm5hbCgpKTsKKyAgICBzdHls
ZS0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGZhbHNlLCBkb2N1bWVudCgpLT5lbGVt
ZW50U2hlZXQoKS0+Y29udGVudHMoKSk7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxMaW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDExODE4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAxLDcgKzMwMSw3
IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KGMKICAgICBDU1NQYXJz
ZXJDb250ZXh0IHBhcnNlckNvbnRleHQoZG9jdW1lbnQoKSwgYmFzZVVSTCwgY2hhcnNldCk7CiAK
ICNpZiBFTkFCTEUoUEFSU0VEX1NUWUxFX1NIRUVUX0NBQ0hJTkcpCi0gICAgaWYgKFJlZlB0cjxT
dHlsZVNoZWV0SW50ZXJuYWw+IHJlc3RvcmVkU2hlZXQgPSBjb25zdF9jYXN0PENhY2hlZENTU1N0
eWxlU2hlZXQqPihjYWNoZWRTdHlsZVNoZWV0KS0+cmVzdG9yZVBhcnNlZFN0eWxlU2hlZXQocGFy
c2VyQ29udGV4dCkpIHsKKyAgICBpZiAoUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gcmVzdG9y
ZWRTaGVldCA9IGNvbnN0X2Nhc3Q8Q2FjaGVkQ1NTU3R5bGVTaGVldCo+KGNhY2hlZFN0eWxlU2hl
ZXQpLT5yZXN0b3JlUGFyc2VkU3R5bGVTaGVldChwYXJzZXJDb250ZXh0KSkgewogICAgICAgICBB
U1NFUlQocmVzdG9yZWRTaGVldC0+aXNDYWNoZWFibGUoKSk7CiAgICAgICAgIEFTU0VSVCghcmVz
dG9yZWRTaGVldC0+aXNMb2FkaW5nKCkpOwogCkBAIC0zMTYsNyArMzE2LDcgQEAgdm9pZCBIVE1M
TGlua0VsZW1lbnQ6OnNldENTU1N0eWxlU2hlZXQoYwogICAgIH0KICNlbmRpZgogCi0gICAgUmVm
UHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6
Y3JlYXRlKGhyZWYsIGJhc2VVUkwsIHBhcnNlckNvbnRleHQpOworICAgIFJlZlB0cjxTdHlsZVNo
ZWV0Q29udGVudHM+IHN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZShocmVm
LCBiYXNlVVJMLCBwYXJzZXJDb250ZXh0KTsKIAogICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0
OjpjcmVhdGUoc3R5bGVTaGVldCwgdGhpcyk7CiAgICAgbV9zaGVldC0+c2V0TWVkaWFRdWVyaWVz
KE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgobV9tZWRpYSkp
OwpAQCAtMzQwLDcgKzM0MCw3IEBAIGJvb2wgSFRNTExpbmtFbGVtZW50OjpzdHlsZVNoZWV0SXNM
b2FkaW4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKCFtX3NoZWV0KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fc2hlZXQtPmludGVybmFsKCktPmlzTG9hZGluZygp
OworICAgIHJldHVybiBtX3NoZWV0LT5jb250ZW50cygpLT5pc0xvYWRpbmcoKTsKIH0KIAogdm9p
ZCBIVE1MTGlua0VsZW1lbnQ6OmxpbmtMb2FkZWQoKQpAQCAtNDMzLDcgKzQzMyw3IEBAIHZvaWQg
SFRNTExpbmtFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHIKICAgICAKICAgICAvLyBXYWxrIHRo
ZSBVUkxzIGxpbmtlZCBieSB0aGUgbGlua2VkLXRvIHN0eWxlc2hlZXQuCiAgICAgaWYgKENTU1N0
eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjb25zdF9jYXN0PEhUTUxMaW5rRWxlbWVudCo+KHRoaXMp
LT5zaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5hZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyh1cmxzKTsKKyAgICAgICAgc3R5bGVTaGVldC0+Y29udGVudHMoKS0+YWRkU3Vi
cmVzb3VyY2VTdHlsZVVSTHModXJscyk7CiB9CiAKIHZvaWQgSFRNTExpbmtFbGVtZW50OjphZGRQ
ZW5kaW5nU2hlZXQoUGVuZGluZ1NoZWV0VHlwZSB0eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxMTgxODQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNyAr
MjUzLDcgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dAogICAgIEhU
TUxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKICAgICBpZiAo
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNvbnN0X2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+
KHRoaXMpLT5zaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5hZGRTdWJy
ZXNvdXJjZVN0eWxlVVJMcyh1cmxzKTsKKyAgICAgICAgc3R5bGVTaGVldC0+Y29udGVudHMoKS0+
YWRkU3VicmVzb3VyY2VTdHlsZVVSTHModXJscyk7CiB9CiAKIGJvb2wgSFRNTFN0eWxlRWxlbWVu
dDo6ZGlzYWJsZWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTE4MTg0KQorKysgU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlzdENoYWluKENTU1J1bGUq
IAogICAgICAgICAgICAgbWVkaWFMaXN0ID0gMDsKIAogICAgICAgICBpZiAocGFyZW50U3R5bGVT
aGVldCkgewotICAgICAgICAgICAgc291cmNlVVJMID0gcGFyZW50U3R5bGVTaGVldC0+aW50ZXJu
YWwoKS0+ZmluYWxVUkwoKTsKKyAgICAgICAgICAgIHNvdXJjZVVSTCA9IHBhcmVudFN0eWxlU2hl
ZXQtPmNvbnRlbnRzKCktPmZpbmFsVVJMKCk7CiAgICAgICAgICAgICBpZiAoc291cmNlVVJMLmlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICBzb3VyY2VVUkwgPSBJbnNwZWN0b3JET01BZ2VudDo6
ZG9jdW1lbnRVUkxTdHJpbmcocGFyZW50U3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpKTsKICAg
ICAgICAgfSBlbHNlCkBAIC0yMjUsOCArMjI1LDggQEAgc3RhdGljIHZvaWQgZmlsbE1lZGlhTGlz
dENoYWluKENTU1J1bGUqIAogICAgICAgICAgICAgICAgICAgICBEb2N1bWVudCogZG9jID0gc3R5
bGVTaGVldC0+b3duZXJEb2N1bWVudCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZG9jKQog
ICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMID0gZG9jLT51cmwoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoIXN0eWxlU2hlZXQtPmludGVybmFsKCktPmZpbmFsVVJMKCku
aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlVVJMID0gc3R5bGVTaGVl
dC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo
IXN0eWxlU2hlZXQtPmNvbnRlbnRzKCktPmZpbmFsVVJMKCkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgc291cmNlVVJMID0gc3R5bGVTaGVldC0+Y29udGVudHMoKS0+ZmluYWxV
UkwoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAg
c291cmNlVVJMID0gIiI7CiAgICAgICAgICAgICAgICAgICAgIG1lZGlhQXJyYXktPmFkZEl0ZW0o
YnVpbGRNZWRpYU9iamVjdChtZWRpYUxpc3QsIHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpID8gTWVk
aWFMaXN0U291cmNlTGlua2VkU2hlZXQgOiBNZWRpYUxpc3RTb3VyY2VJbmxpbmVTaGVldCwgc291
cmNlVVJMKSk7CkBAIC0zMTQsNyArMzE0LDcgQEAgYm9vbCBJbnNwZWN0b3JTdHlsZTo6c2V0UHJv
cGVydHlUZXh0KHVucwogICAgICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gdGVtcE11dGFi
bGVTdHlsZSA9IFN0eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZSgpOwogICAgICAgICBSZWZQdHI8Q1NT
U3R5bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUo
KTsKICAgICAgICAgQ1NTUGFyc2VyIHAoQ1NTU3RyaWN0TW9kZSk7Ci0gICAgICAgIHAucGFyc2VE
ZWNsYXJhdGlvbih0ZW1wTXV0YWJsZVN0eWxlLmdldCgpLCBwcm9wZXJ0eVRleHQgKyAiICIgKyBi
b2d1c1Byb3BlcnR5TmFtZSArICI6IG5vbmUiLCAmc291cmNlRGF0YSwgbV9zdHlsZS0+cGFyZW50
U3R5bGVTaGVldCgpLT5pbnRlcm5hbCgpKTsKKyAgICAgICAgcC5wYXJzZURlY2xhcmF0aW9uKHRl
bXBNdXRhYmxlU3R5bGUuZ2V0KCksIHByb3BlcnR5VGV4dCArICIgIiArIGJvZ3VzUHJvcGVydHlO
YW1lICsgIjogbm9uZSIsICZzb3VyY2VEYXRhLCBtX3N0eWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkt
PmNvbnRlbnRzKCkpOwogICAgICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiYgcHJv
cGVydHlEYXRhID0gc291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwogICAgICAgICB1bnNpZ25lZCBw
cm9wZXJ0eUNvdW50ID0gcHJvcGVydHlEYXRhLnNpemUoKTsKIApAQCAtNjg5LDggKzY4OSw4IEBA
IFBhc3NSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gSW5zcGVjdG8KIC8vIHN0YXRpYwogU3Ry
aW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRVUkwoQ1NTU3R5bGVTaGVldCogcGFn
ZVN0eWxlU2hlZXQpCiB7Ci0gICAgaWYgKHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVTaGVl
dC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBwYWdl
U3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+ZmluYWxVUkwoKS5zdHJpbmcoKTsKKyAgICBpZiAocGFn
ZVN0eWxlU2hlZXQgJiYgIXBhZ2VTdHlsZVNoZWV0LT5jb250ZW50cygpLT5maW5hbFVSTCgpLmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2VTdHlsZVNoZWV0LT5jb250ZW50cygpLT5maW5h
bFVSTCgpLnN0cmluZygpOwogICAgIHJldHVybiBlbXB0eVN0cmluZygpOwogfQogCkBAIC03MTks
OCArNzE5LDggQEAgU3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpbmFsVVJMKCkgYwogdm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIHRl
eHQpCiB7CiAgICAgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29w
ZShtX3BhZ2VTdHlsZVNoZWV0LmdldCgpKTsKLSAgICBtX3BhZ2VTdHlsZVNoZWV0LT5pbnRlcm5h
bCgpLT5jbGVhclJ1bGVzKCk7Ci0gICAgbV9wYWdlU3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+cGFy
c2VTdHJpbmcodGV4dCk7CisgICAgbV9wYWdlU3R5bGVTaGVldC0+Y29udGVudHMoKS0+Y2xlYXJS
dWxlcygpOworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmNvbnRlbnRzKCktPnBhcnNlU3RyaW5nKHRl
eHQpOwogICAgIG1fcGFnZVN0eWxlU2hlZXQtPmNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycygp
OwogICAgIG1faW5zcGVjdG9yU3R5bGVzLmNsZWFyKCk7CiAgICAgZmlyZVN0eWxlU2hlZXRDaGFu
Z2VkKCk7CkBAIC0xMDg4LDcgKzEwODgsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OmVu
c3VyZVNvdXJjZURhCiAgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQtPmhhc1RleHQoKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gbmV3
U3R5bGVTaGVldCA9IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFN0
eWxlU2hlZXRDb250ZW50cz4gbmV3U3R5bGVTaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3Jl
YXRlKCk7CiAgICAgQ1NTUGFyc2VyIHAoQ1NTU3RyaWN0TW9kZSk7CiAgICAgU3R5bGVSdWxlUmFu
Z2VNYXAgcnVsZVJhbmdlTWFwOwogICAgIHAucGFyc2VTaGVldChuZXdTdHlsZVNoZWV0LmdldCgp
LCBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKSwgMCwgJnJ1bGVSYW5nZU1hcCk7CkBAIC0xNDE1
LDcgKzE0MTUsNyBAQCBib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6CiAK
ICAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gdGVtcERlY2xhcmF0aW9uID0gU3R5bGVQcm9w
ZXJ0eVNldDo6Y3JlYXRlKCk7CiAgICAgQ1NTUGFyc2VyIHAobV9lbGVtZW50LT5kb2N1bWVudCgp
KTsKLSAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcERlY2xhcmF0aW9uLmdldCgpLCBtX3N0eWxl
VGV4dCwgcmVzdWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgpLT5pbnRl
cm5hbCgpKTsKKyAgICBwLnBhcnNlRGVjbGFyYXRpb24odGVtcERlY2xhcmF0aW9uLmdldCgpLCBt
X3N0eWxlVGV4dCwgcmVzdWx0LCBtX2VsZW1lbnQtPmRvY3VtZW50KCktPmVsZW1lbnRTaGVldCgp
LT5jb250ZW50cygpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAkocmV2aXNp
b24gMTE4MTg0KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxl
U2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBDYWNoZWRD
U1NTdHlsZVNoZWV0OjpkZXN0cm95RGVjb2RlZAogICAgIHNldERlY29kZWRTaXplKDApOwogfQog
Ci1QYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gQ2FjaGVkQ1NTU3R5bGVTaGVldDo6cmVz
dG9yZVBhcnNlZFN0eWxlU2hlZXQoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKK1Bh
c3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBDYWNoZWRDU1NTdHlsZVNoZWV0OjpyZXN0b3Jl
UGFyc2VkU3R5bGVTaGVldChjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQogewogICAg
IGlmICghbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTgw
LDcgKzE4MCw3IEBAIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBDYWNoZWRDU1MKICAg
ICByZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGU7CiB9CiAKLXZvaWQgQ2FjaGVkQ1NTU3R5
bGVTaGVldDo6c2F2ZVBhcnNlZFN0eWxlU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJu
YWw+IHNoZWV0KQordm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpzYXZlUGFyc2VkU3R5bGVTaGVl
dChQYXNzUmVmUHRyPFN0eWxlU2hlZXRDb250ZW50cz4gc2hlZXQpCiB7CiAgICAgQVNTRVJUKHNo
ZWV0ICYmIHNoZWV0LT5pc0NhY2hlYWJsZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvbG9h
ZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxMTgxODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIENhY2hlZFJlc291cmNlQ2xpZW50OwogICAgIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLSAg
ICBjbGFzcyBTdHlsZVNoZWV0SW50ZXJuYWw7CisgICAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRz
OwogICAgIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CiAgICAgc3RydWN0IENTU1BhcnNlckNv
bnRleHQ7CiAKQEAgLTU3LDggKzU3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAg
IHZvaWQgY2hlY2tOb3RpZnkoKTsKIAotICAgICAgICBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRl
cm5hbD4gcmVzdG9yZVBhcnNlZFN0eWxlU2hlZXQoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwot
ICAgICAgICB2b2lkIHNhdmVQYXJzZWRTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVldElu
dGVybmFsPik7CisgICAgICAgIFBhc3NSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiByZXN0b3Jl
UGFyc2VkU3R5bGVTaGVldChjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CisgICAgICAgIHZvaWQg
c2F2ZVBhcnNlZFN0eWxlU2hlZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0Q29udGVudHM+KTsKICAg
ICAKICAgICBwcml2YXRlOgogICAgICAgICBib29sIGNhblVzZVNoZWV0KGJvb2wgZW5mb3JjZU1J
TUVUeXBlLCBib29sKiBoYXNWYWxpZE1JTUVUeXBlKSBjb25zdDsKQEAgLTY4LDcgKzY4LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBSZWZQdHI8VGV4dFJlc291cmNlRGVjb2Rlcj4g
bV9kZWNvZGVyOwogICAgICAgICBTdHJpbmcgbV9kZWNvZGVkU2hlZXRUZXh0OwogCi0gICAgICAg
IFJlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IG1fcGFyc2VkU3R5bGVTaGVldENhY2hlOworICAg
ICAgICBSZWZQdHI8U3R5bGVTaGVldENvbnRlbnRzPiBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZTsK
ICAgICB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAko
cmV2aXNpb24gMTE4MTg0KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MCw3ICsyODAsNyBAQCB2b2lkIFBhZ2VTZXJpYWxpemVy
OjpzZXJpYWxpemVDU1NTdHlsZVNoCiAKICAgICBpZiAodXJsLmlzVmFsaWQoKSAmJiAhbV9yZXNv
dXJjZVVSTHMuY29udGFpbnModXJsKSkgewogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNo
ZWNrIHdoZXRoZXIgYSBjaGFyc2V0IGhhcyBiZWVuIHNwZWNpZmllZCBhbmQgaWYgbm9uZSB3YXMg
Zm91bmQgYWRkIG9uZS4KLSAgICAgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyhzdHlsZVNo
ZWV0LT5pbnRlcm5hbCgpLT5jaGFyc2V0KCkpOworICAgICAgICBUZXh0RW5jb2RpbmcgdGV4dEVu
Y29kaW5nKHN0eWxlU2hlZXQtPmNvbnRlbnRzKCktPmNoYXJzZXQoKSk7CiAgICAgICAgIEFTU0VS
VCh0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKICAgICAgICAgU3RyaW5nIHRleHRTdHJpbmcgPSBj
c3NUZXh0LnRvU3RyaW5nKCk7CiAgICAgICAgIENTdHJpbmcgdGV4dCA9IHRleHRFbmNvZGluZy5l
bmNvZGUodGV4dFN0cmluZy5jaGFyYWN0ZXJzKCksIHRleHRTdHJpbmcubGVuZ3RoKCksIEVudGl0
aWVzRm9yVW5lbmNvZGFibGVzKTsK
</data>
<flag name="review"
          id="150192"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>