<?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>155113</bug_id>
          
          <creation_ts>2016-03-07 08:13:00 -0800</creation_ts>
          <short_desc>ElementRuleCollector should not mutate document and style</short_desc>
          <delta_ts>2022-07-24 13:37:15 -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>WebKit 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>ahmad.saleem792</cc>
    
    <cc>ap</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>rniwa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1171587</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-03-07 08:13:00 -0800</bug_when>
    <thetext>Move applying of style relations out of ElementRuleCollector and StyleResolver. This gets us closer to making StyleResolver const for Element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171603</commentid>
    <comment_count>1</comment_count>
      <attachid>273184</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-03-07 09:11:52 -0800</bug_when>
    <thetext>Created attachment 273184
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171605</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-07 09:13:41 -0800</bug_when>
    <thetext>Attachment 273184 did not pass style-queue:


ERROR: Source/WebCore/style/StyleRelations.cpp:39:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171607</commentid>
    <comment_count>3</comment_count>
      <attachid>273186</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-03-07 09:21:34 -0800</bug_when>
    <thetext>Created attachment 273186
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171609</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-07 09:23:11 -0800</bug_when>
    <thetext>Attachment 273186 did not pass style-queue:


ERROR: Source/WebCore/style/StyleRelations.cpp:39:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171623</commentid>
    <comment_count>5</comment_count>
      <attachid>273188</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2016-03-07 09:45:05 -0800</bug_when>
    <thetext>Created attachment 273188
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171626</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-07 09:46:48 -0800</bug_when>
    <thetext>Attachment 273188 did not pass style-queue:


ERROR: Source/WebCore/style/StyleRelations.cpp:40:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 32 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171992</commentid>
    <comment_count>7</comment_count>
      <attachid>273188</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2016-03-08 01:49:54 -0800</bug_when>
    <thetext>Comment on attachment 273188
patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1886391</commentid>
    <comment_count>8</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-07-24 11:53:59 -0700</bug_when>
    <thetext>This landed as part of following:

https://github.com/WebKit/WebKit/commit/a83279bfdc4c0c700da87bea326c1c2dcacd2d11

and similarly another commit landed:

https://github.com/WebKit/WebKit/commit/af23f8e0eb231b6cd22904c6511993e33651083a

I think this can be marked as &quot;RESOLVED FIXED&quot;. Thanks!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273184</attachid>
            <date>2016-03-07 09:11:52 -0800</date>
            <delta_ts>2016-03-07 09:21:34 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-relations-3.patch</filename>
            <type>text/plain</type>
            <size>95331</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NSBAQAorMjAxNi0wMy0wNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3Igc2hvdWxkIG5vdCBtdXRhdGUgZG9jdW1lbnQgYW5kIHN0eWxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxMTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3ZlIGFwcGx5aW5nIG9mIHN0eWxlIHJl
bGF0aW9ucyBvdXQgb2YgRWxlbWVudFJ1bGVDb2xsZWN0b3IgYW5kIFN0eWxlUmVzb2x2ZXIuCisg
ICAgICAgIFRoaXMgZ2V0cyB1cyBjbG9zZXIgdG8gbWFraW5nIFN0eWxlUmVzb2x2ZXIgY29uc3Qg
Zm9yIEVsZW1lbnQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0VsZW1lbnRSdWxl
Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpF
bGVtZW50UnVsZUNvbGxlY3Rvcik6CisKKyAgICAgICAgICAgIE5vIG5lZWQgZm9yIHN0eWxlIHBh
cmFtZXRlciBhbnltb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rv
cjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVD
b2xsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMpOgorCisgICAgICAgICAgICBDbGll
bnQgd2lsbCBub3cgZG8gdGhlIHN0eWxlIGFuZCBlbGVtZW50IG11dGF0aW9ucy4gSnVzdCBjb2xs
ZWN0IHRoZSBkYXRhIGhlcmUuCisKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFJ1bGVDb2xsZWN0b3I6OmNvbW1pdFN0eWxlUmVsYXRpb25zKTogRGVsZXRlZC4KKworICAg
ICAgICAgICAgTW92ZXMgdG8gU3R5bGVSZWxhdGlvbnMuY3BwCisKKyAgICAgICAgKiBjc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVj
dG9yOjpoYXNNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xs
ZWN0b3I6Om1hdGNoZWRQc2V1ZG9FbGVtZW50SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRSdWxlQ29sbGVjdG9yOjpzdHlsZVJlbGF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50UnVsZUNvbGxlY3Rvcjo6ZGlkTWF0Y2hVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKToKKyAg
ICAgICAgKiBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFRdWVyeU1hdGNoZXI6OnByZXBhcmVFdmFsdWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0eWxlUmVsYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6aXNGaXJzdENoaWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjppc0ZpcnN0T2ZU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Y291bnRFbGVtZW50c09mVHlwZUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ6OkNo
ZWNraW5nQ29udGV4dCk6CisgICAgICAgICogY3NzL1N0eWxlTWVkaWEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVNZWRpYTo6bWF0Y2hNZWRpdW0pOgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNBdFNoYWRvd0JvdW5kYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisKKyAgICAgICAgICAgIEFw
cGx5IHRoZSBzdHlsZSByZWxhdGlvbnMgYWZmZWN0aW5nIGN1cnJlbnQgc3R5bGUgaW1tZWRpYXRl
bHkuCisgICAgICAgICAgICBQYXNzIHRoZSByZXN0IHRvIHRoZSBjbGllbnQuCisKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAg
ICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFN0eWxl
OjpFbGVtZW50U3R5bGUpOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyRXhjbHVkaW5nUHNl
dWRvRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZURpcmVjdEFkamFjZW50VHJlZVdhbGtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlSW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6YWRkU3R5bGVSZWxhdGlvbkZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50SXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50SXNGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNIb3ZlcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVFbGVtZW50SXNMYXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc09ubHlDaGlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVl
SWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
SXNOdGhDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzTnRoQ2hpbGRPZik6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbWVudElzTnRoTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNOdGhMYXN0Q2hpbGRP
Zik6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cyk6CisKKyAgICAg
ICAgICAgIEFwcGx5IHN0eWxlIHJlbGF0aW9ucy4KKworICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVwZGF0ZUxheW91dElmRGltZW5zaW9uc091dE9mRGF0ZSk6CisgICAgICAgICogZG9tL0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c3R5bGVSZXNvbHZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZlU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6ZGlkRGV0YWNoUmVuZGVyZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisKKyAgICAgICAgICAgIFJldHVybiBFbGVtZW50U3R5
bGUgKHdoaWNoIGNvbnRhaW5zIHN0eWxlIHJlbGF0aW9ucyBhbG9uZyB3aXRoIHRoZSByZW5kZXIg
c3R5bGUpLgorICAgICAgICAgICAgUmVuYW1lIGZvciBjb25zaXN0ZW5jeS4KKworICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERlbGV0ZWQuCisgICAg
ICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzVmlzaWJs
ZUluVmlld3BvcnRDaGFuZ2VkKToKKyAgICAgICAgKiBkb20vUHNldWRvRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpjbGVhckhvc3RFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpkaWRBdHRhY2hSZW5kZXJlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6UHNldWRvRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL1BzZXVkb0VsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUaXRs
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6Y29tcHV0
ZWRUZXh0V2l0aERpcmVjdGlvbik6CisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6aG9zdElu
cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6cmVzb2x2ZUN1c3Rv
bVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6c2hhZG93UHNl
dWRvSWQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlckNvbnRhaW5lckVsZW1l
bnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJDb250YWlu
ZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVt
YkVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERl
bGV0ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3Rv
bVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50
OjpUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVu
dDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERl
bGV0ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJl
Z2lvbik6CisgICAgICAgICogc3R5bGUvU3R5bGVSZWxhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpjb21taXRSZWxhdGlvbnNUb1JlbmRlclN0eWxlKToKKworICAg
ICAgICAgICAgQ29tbWl0IHJlbGF0aW9ucyBhZmZlY3Rpbmcgc3R5bGUgdGhhdGlzIGJlaW5nIGNv
bXB1dGVkLgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Y29tbWl0UmVsYXRpb25zVG9Eb2N1
bWVudCk6CisKKyAgICAgICAgICAgIENvbW1pdCByZWxhdGlvbnMgdGhhdCBtdXRhdGUgZG9jdW1l
bnQuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlbGF0aW9ucy5oOiBBZGRlZC4KKworICAgICAg
ICAgICAgRmFjdG9yIHN0eWxlIHJlbGF0aW9uIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25z
IHRvIGEgZmlsZSBvZiB0aGVpciBvd24uCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSZWxh
dGlvbjo6UmVsYXRpb24pOgorICAgICAgICAqIHN0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5nUmVzb2x2ZXI6OnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VHJlZVJlc29sdmVyOjpzdHlsZUZv
ckVsZW1lbnQpOgorCisgICAgICAgICAgICBBcHBseSBzdHlsZSByZWxhdGlvbnMuCisKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXplU3lzdGVtTGFu
Z3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVEYXRh
OjpvdmVycmlkZUNvbXB1dGVkU3R5bGUpOgorCiAyMDE2LTAzLTA3ICBBbmRyZWFzIEtsaW5nICA8
YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFJlbmRlclN0eWxlIGNvcHktb24td3Jp
dGUgYSBiaXQgbGVzcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTc2MzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjYy
OSw2ICsyNjI5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHN0eWxlL1JlbmRlclRyZWVQ
b3NpdGlvbi5jcHAKICAgICBzdHlsZS9TdHlsZUNoYW5nZS5jcHAKICAgICBzdHlsZS9TdHlsZUZv
bnRTaXplRnVuY3Rpb25zLmNwcAorICAgIHN0eWxlL1N0eWxlUmVsYXRpb25zLmNwcAogICAgIHN0
eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAogICAgIHN0eWxlL1N0eWxlU2hhcmluZ1Jl
c29sdmVyLmNwcAogICAgIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjE5LDYgKzY2MTksOCBAQAogCQlFNDUzOTA0OTBF
QUZENjM3MDAzNjk1QzggLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDM4MEVBRkQ2MzcwMDM2
OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICovOyB9OwogCQlFNDUzOTA0RDBF
QUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElP
Uy5tbSAqLzsgfTsKIAkJRTQ1MzkwQUUwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlP
Uy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUz
OTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLzsgfTsKKwkJRTQ2
MTgwMkQxQzhERDI5MDAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMg
LyogU3R5bGVSZWxhdGlvbnMuaCAqLzsgfTsKKwkJRTQ2MTgwMkYxQzhERDREMjAwMjZDMDJDIC8q
IFN0eWxlUmVsYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0NjE4MDJFMUM4REQ0RDIwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5jcHAg
Ki87IH07CiAJCUU0NjFENjVEMUJCMEM3RjAwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYxRDY1
QzFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuY3BwICovOyB9OwogCQlFNDYx
RDY1RjFCQjBDODBEMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjFENjVFMUJCMEM4MEQwMENCNTY0
NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5oICovOyB9OwogCQlFNDYyQTRBMTExM0U3MUJFMDA0QTQy
MjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NjQ0LDYg
KzE0NjQ2LDggQEAKIAkJRTQ1MzkwMzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1J
bnRlcmZhY2VJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2lkZ2V0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9T
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbU1lbW9yeUlP
Uy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NjE4MDJDMUM4REQyOTAwMDI2
QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDYxODAy
RTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZWxhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVl
dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0aG9yU3R5bGVT
aGVldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxRDY1RTFCQjBDODBE
MDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXV0aG9yU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIzNTE3LDYgKzIzNTIxLDggQEAKIAkJCQlFNDAxRTBBMzFDM0MwQjgzMDBG
MzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLywKIAkJCQlFNEQ1OEVCNjE3QjRFRDg5MDBDQkRDQTgg
LyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJRTRENThFQjcxN0I0RUQ4OTAw
Q0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCAqLywKKwkJCQlFNDYxODAyRTFDOERE
NEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovLAorCQkJCUU0NjE4MDJDMUM4REQy
OTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovLAogCQkJCUU0RDU4RUIyMTdCNERCREMw
MENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgKi8sCiAJCQkJRTRENThFQjMx
N0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8sCiAJCQkJRTQ3
QTNBQzIxQzVFQUJCRTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcCAqLywKQEAg
LTI1MTg4LDYgKzI1MTk0LDcgQEAKIAkJCQlGRDMxNUZGRjEyQjAyNjc2MDBDMUEzNTkgLyogQ2hh
bm5lbE1lcmdlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDAyMTJCMDI2NzYwMEMx
QTM1OSAvKiBDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZB
MDA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTQ2MTgwMkQxQzhERDI5MDAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDNTU5MkY3ODFBOTJBQTI4MDAxRjg4NjIgLyogQ2hhcmFjdGVyUHJvcGVydGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCOEZGRDExNkFFN0Y5NjAwMzgzODhEIC8qIENoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJBMEQw
MDZDMUQwMEVGNkYyNiAvKiBDaGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjI3Nyw3
ICsyNjI4NCw2IEBACiAJCQkJNTE0ODQ1M0YxQkI5RDA3RTAwNkE3MkVEIC8qIElEQkVycm9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4QjFCQjRDNEU4MDAxMjg5OEYgLyogSURCRXZlbnRE
aXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4RDFCQjRDNEU4MDAxMjg5OEYg
LyogSURCRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGNDFBNzIxQkE3M0I1QjAwMkUw
NTNCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
OUE2Q0JBRDFDNkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxMDMxMDUwMUJBOENDMDMwMDMzMjlDMCAvKiBJREJGYWN0b3J5SW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDOEYxQkI0QzRFODAwMTI4OThGIC8qIElEQkdl
dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTI2Miw2ICsyOTI2OCw3IEBACiAJCQkJQkM2
NEI0RDkwQ0I0Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNEE2RTlGQzMxM0MxN0QxRDAwNDZBN0Y4IC8qIENTU0ZvbnRGZWF0dXJlVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NEI0REIwQ0I0Mjk4QTAwNUYyQjYyIC8qIENT
U0ZvbnRTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDYxODAyRjFDOERENEQyMDAy
NkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZDRjEw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzAyQTY0NjBFMDlBQUU5MDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzIzRTRFMTBEQUFDRTBGMDA5RkRDOTEgLyogQ1NTR3JhZGllbnRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxl
Q29sbGVjdG9yLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOSArNzgsOCBAQCBw
dWJsaWM6CiAgICAgY29uc3QgYm9vbCBpbmNsdWRlRW1wdHlSdWxlczsKIH07CiAKLUVsZW1lbnRS
dWxlQ29sbGVjdG9yOjpFbGVtZW50UnVsZUNvbGxlY3RvcihFbGVtZW50JiBlbGVtZW50LCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzLCBjb25zdCBT
ZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCitFbGVtZW50UnVsZUNvbGxlY3Rvcjo6RWxl
bWVudFJ1bGVDb2xsZWN0b3IoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgRG9jdW1lbnRSdWxlU2V0
cyYgcnVsZVNldHMsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKICAgICA6
IG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9zdHlsZShzdHlsZSkKICAgICAsIG1fYXV0aG9y
U3R5bGUoKnJ1bGVTZXRzLmF1dGhvclN0eWxlKCkpCiAgICAgLCBtX3VzZXJTdHlsZShydWxlU2V0
cy51c2VyU3R5bGUoKSkKICAgICAsIG1fc2VsZWN0b3JGaWx0ZXIoc2VsZWN0b3JGaWx0ZXIpCkBA
IC0xMzMsNyArMTMyLDYgQEAgaW5saW5lIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmFkZEVs
ZQogdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3Qg
TWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVs
ZVJhbmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghKG1fbW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmlu
Z1N0eWxlICYmICFtX3N0eWxlKSwgIldoZW4gcmVzb2x2aW5nIHN0eWxlLCB0aGUgU2VsZWN0b3JD
aGVja2VyIG11c3QgaGF2ZSBhIHN0eWxlIHRvIHNldCB0aGUgcHNldWRvIGVsZW1lbnRzIGFuZC9v
ciB0byBkbyBtYXJraW5nLiBUaGUgU2VsZWN0b3JDb21waWxlciBhbHNvIHJlbHkgb24gdGhhdCBi
ZWhhdmlvci4iKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEobV9tb2RlID09IFNlbGVjdG9y
Q2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVu
dHMgJiYgbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgIT0gTk9QU0VVRE8pLCAiV2hlbiBp
biBTdHlsZUludmFsaWRhdGlvbiBvciBTaGFyaW5nUnVsZXMsIFNlbGVjdG9yQ2hlY2tlciBkb2Vz
IG5vdCB0cnkgdG8gbWF0Y2ggdGhlIHBzZXVkbyBJRC4gV2hpbGUgRWxlbWVudFJ1bGVDb2xsZWN0
b3Igc3VwcG9ydHMgbWF0Y2hpbmcgYSBwYXJ0aWN1bGFyIHBzZXVkb0lkIGluIHRoaXMgY2FzZSwg
dGhpcyB3b3VsZCBpbmRpY2F0ZSBhIGVycm9yIGF0IHRoZSBjYWxsIHNpdGUgc2luY2UgbWF0Y2hp
bmcgYSBwYXJ0aWN1bGFyIGVsZW1lbnQgc2hvdWxkIGJlIHVubmVjZXNzYXJ5LiIpOwogCiAjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQpAQCAtMTk0LDEwICsxOTIsNyBAQCB2b2lkIEVsZW1lbnRSdWxl
Q29sbGVjdG9yOjpzb3J0QW5kVHJhbnNmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qg
b2YgZGVjbGFyYXRpb25zLgogICAgIGZvciAoY29uc3QgTWF0Y2hlZFJ1bGUmIG1hdGNoZWRSdWxl
IDogbV9tYXRjaGVkUnVsZXMpIHsKLSAgICAgICAgaWYgKG1fc3R5bGUgJiYgbWF0Y2hlZFJ1bGUu
cnVsZURhdGEtPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CiAgICAgICAgIG1fcmVzdWx0LmFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbWF0Y2hl
ZFJ1bGUucnVsZURhdGEtPnJ1bGUoKSwgbWF0Y2hlZFJ1bGUucnVsZURhdGEtPmxpbmtNYXRjaFR5
cGUoKSwgbWF0Y2hlZFJ1bGUucnVsZURhdGEtPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKICAg
ICB9CiB9CkBAIC00MTQsNyArNDA5LDEyIEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVj
dG9yOjpydWxlTWEKICNpZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORwogICAgICAgICBydWxl
RGF0YS5jb21waWxlZFNlbGVjdG9yVXNlZCgpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBzZWxl
Y3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJnNwZWNpZmljaXR5KTsKKyAgICAgICAgYm9vbCBzZWxl
Y3Rvck1hdGNoZXMgPSBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJnNwZWNpZmljaXR5KTsK
KworICAgICAgICBpZiAoc2VsZWN0b3JNYXRjaGVzICYmIHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21t
b25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgbV9kaWRNYXRjaFVuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IgPSB0cnVlOworCisgICAgICAgIHJldHVybiBzZWxlY3Rvck1hdGNoZXM7
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogCkBAIC00NTAsODYg
KzQ1MCwxNiBAQCBpbmxpbmUgYm9vbCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hCiAgICAg
ICAgIHNlbGVjdG9yTWF0Y2hlcyA9IHNlbGVjdG9yQ2hlY2tlci5tYXRjaCgqc2VsZWN0b3IsIG1f
ZWxlbWVudCwgY29udGV4dCwgc3BlY2lmaWNpdHkpOwogICAgIH0KIAotICAgIGNvbW1pdFN0eWxl
UmVsYXRpb25zKGNvbnRleHQuc3R5bGVSZWxhdGlvbnMpOwotCi0gICAgaWYgKGNvbnRleHQucHNl
dWRvSURTZXQpCi0gICAgICAgIG1fc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhjb250ZXh0LnBz
ZXVkb0lEU2V0KTsKKyAgICBpZiAocnVsZURhdGEuY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yKCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hlcyB8fCBjb250ZXh0LnBzZXVk
b0lEU2V0KQorICAgICAgICAgICAgbV9kaWRNYXRjaFVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ig
PSB0cnVlOworICAgIH0KKyAgICBtX21hdGNoZWRQc2V1ZG9FbGVtZW50SWRzLm1lcmdlKGNvbnRl
eHQucHNldWRvSURTZXQpOworICAgIG1fc3R5bGVSZWxhdGlvbnMuYXBwZW5kVmVjdG9yKGNvbnRl
eHQuc3R5bGVSZWxhdGlvbnMpOwogCiAgICAgcmV0dXJuIHNlbGVjdG9yTWF0Y2hlczsKIH0KIAot
Ly8gRklYTUU6IFJ1bGUgY29sbGVjdG9yIHNob3VsZCBub3QgYmUgZG9pbmcgbXV0YXRpb25zLiBN
b3ZlIHRoaXMgc29tZXdoZXJlIGVsc2UuCi12b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjb21t
aXRTdHlsZVJlbGF0aW9ucyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb25zJiBz
dHlsZVJlbGF0aW9ucykKLXsKLSAgICBmb3IgKGF1dG8mIHJlbGF0aW9uIDogc3R5bGVSZWxhdGlv
bnMpIHsKLSAgICAgICAgc3dpdGNoIChyZWxhdGlvbi50eXBlKSB7Ci0gICAgICAgIGNhc2UgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5QWN0aXZlOgotICAgICAgICAg
ICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QWN0aXZlKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OkFmZmVjdGVkQnlEcmFnOgotICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVt
ZW50ID09ICZtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0ZWRC
eURyYWcoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWxhdGlvbi5lbGVt
ZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUVtcHR5
OgotICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRTdHlsZUFmZmVjdGVkQnlFbXB0eSgp
OwotICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0RW1wdHlTdGF0ZShyZWxhdGlvbi52YWx1ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRp
b246OkFmZmVjdGVkQnlIb3ZlcjoKLSAgICAgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9
PSAmbV9lbGVtZW50KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEFmZmVjdGVkQnlIb3Zl
cigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQu
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3Vz
U2libGluZzoKLSAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0U3R5bGVJc0FmZmVjdGVk
QnlQcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nOgotICAgICAg
ICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXM6Ci0g
ICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJk
UG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRS
dWxlczoKLSAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFz
ZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoKLSAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQu
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAg
ICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJh
Y2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RD
aGlsZFJ1bGVzOgotICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
U2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpGaXJzdENoaWxkOgotICAgICAgICAgICAg
aWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhdXRvKiBz
dHlsZSA9IHJlbGF0aW9uLmVsZW1lbnQucmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246Okxhc3RDaGlsZDoKLSAgICAgICAg
ICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9PSAmbV9lbGVtZW50KQotICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhdXRv
KiBzdHlsZSA9IHJlbGF0aW9uLmVsZW1lbnQucmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleDoKLSAg
ICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRJbmRleChyZWxhdGlvbi52YWx1ZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OlVuaXF1ZToKLSAgICAgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9PSAm
bV9lbGVtZW50KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoYXV0byogc3R5bGUgPSByZWxhdGlvbi5lbGVtZW50LnJlbmRlclN0eWxl
KCkpCi0gICAgICAgICAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBSdWxlU2V0OjpSdWxlRGF0YVZlY3Rvciog
cnVsZXMsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBTdHlsZVJlc29sdmVyOjpS
dWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKICAgICBpZiAoIXJ1bGVzKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBAIHN0cnVjdCBNYXRjaGVkUnVsZSB7CiAKIGNsYXNzIEVsZW1lbnRSdWxl
Q29sbGVjdG9yIHsKIHB1YmxpYzoKLSAgICBFbGVtZW50UnVsZUNvbGxlY3RvcihFbGVtZW50Jiwg
UmVuZGVyU3R5bGUqLCBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiwgY29uc3QgU2VsZWN0b3JGaWx0
ZXIqKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvcihFbGVtZW50JiwgY29uc3QgRG9jdW1lbnRS
dWxlU2V0cyYsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKik7CiAgICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3IoRWxlbWVudCYsIGNvbnN0IFJ1bGVTZXQmIGF1dGhvclN0eWxlLCBjb25zdCBTZWxlY3RvckZp
bHRlciopOwogCiAgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzLCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CkBAIC02Nyw2ICs2NywxMCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNNYXRjaGVkUnVsZXMoKSBjb25zdCB7IHJldHVybiAhbV9tYXRj
aGVkUnVsZXMuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhck1hdGNoZWRSdWxlcygpOwogCisg
ICAgY29uc3QgUHNldWRvSWRTZXQmIG1hdGNoZWRQc2V1ZG9FbGVtZW50SWRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRjaGVkUHNldWRvRWxlbWVudElkczsgfQorICAgIGNvbnN0IFN0eWxlOjpSZWxh
dGlvbnMmIHN0eWxlUmVsYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVJlbGF0aW9uczsg
fQorICAgIGJvb2wgZGlkTWF0Y2hVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaWRNYXRjaFVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVz
KiwgYm9vbCBpc0NhY2hlYWJsZSA9IHRydWUpOwogCkBAIC04NywxMCArOTEsNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBNYXRjaGVkUnVsZSYpOwogCi0gICAg
dm9pZCBjb21taXRTdHlsZVJlbGF0aW9ucyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVs
YXRpb25zJik7Ci0KICAgICBFbGVtZW50JiBtX2VsZW1lbnQ7Ci0gICAgUmVuZGVyU3R5bGUqIG1f
c3R5bGUgeyBudWxscHRyIH07CiAgICAgY29uc3QgUnVsZVNldCYgbV9hdXRob3JTdHlsZTsKICAg
ICBjb25zdCBSdWxlU2V0KiBtX3VzZXJTdHlsZSB7IG51bGxwdHIgfTsKICAgICBjb25zdCBTZWxl
Y3RvckZpbHRlciogbV9zZWxlY3RvckZpbHRlciB7IG51bGxwdHIgfTsKQEAgLTEwOCw3ICsxMDks
MTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIE91dHB1dC4KICAgICBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZT4+IG1fbWF0Y2hlZFJ1bGVMaXN0OworICAgIGJvb2wgbV9kaWRNYXRjaFVuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IgeyBmYWxzZSB9OwogICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0
IG1fcmVzdWx0OworICAgIFN0eWxlOjpSZWxhdGlvbnMgbV9zdHlsZVJlbGF0aW9uczsKKyAgICBQ
c2V1ZG9JZFNldCBtX21hdGNoZWRQc2V1ZG9FbGVtZW50SWRzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3Bw
CShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNo
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYVF1ZXJ5RXZhbHVhdG9yPiBNZWQKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJvb3RTdHlsZSA9
IG1fZG9jdW1lbnQtPmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKmRvY3Vt
ZW50RWxlbWVudCwgbV9kb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50
UnVsZXMpOworICAgIGF1dG8gcm9vdFN0eWxlID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNv
bHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LT5yZW5k
ZXJTdHlsZSgpLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykucmVuZGVyU3R5bGU7CiAKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPihtZWRpYVR5cGUoKSwg
bV9kb2N1bWVudC0+ZnJhbWUoKSwgcm9vdFN0eWxlLmdldCgpKTsKKyAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPihtZWRpYVR5cGUoKSwgbV9kb2N1bWVudC0+
ZnJhbWUoKSwgcm9vdFN0eWxlLnB0cigpKTsKIH0KIAogYm9vbCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6
ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCogbWVkaWEpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEyICs4NCwx
MiBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVja2VyOjpMb2NhbENvbnRleHQgewogCiB9OwogCi1zdGF0
aWMgaW5saW5lIHZvaWQgYWRkU3R5bGVSZWxhdGlvbihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUgdHlwZSwgdW5zaWduZWQgdmFsdWUgPSAxKQor
c3RhdGljIGlubGluZSB2b2lkIGFkZFN0eWxlUmVsYXRpb24oU2VsZWN0b3JDaGVja2VyOjpDaGVj
a2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgU3R5
bGU6OlJlbGF0aW9uOjpUeXBlIHR5cGUsIHVuc2lnbmVkIHZhbHVlID0gMSkKIHsKLSAgICBBU1NF
UlQodmFsdWUgPT0gMSB8fCB0eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
TnRoQ2hpbGRJbmRleCB8fCB0eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0ZWRCeUVtcHR5KTsKKyAgICBBU1NFUlQodmFsdWUgPT0gMSB8fCB0eXBlID09IFN0eWxl
OjpSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleCB8fCB0eXBlID09IFN0eWxlOjpSZWxhdGlvbjo6QWZm
ZWN0ZWRCeUVtcHR5KTsKICAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnJlc29sdmluZ01vZGUgIT0g
U2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGNoZWNraW5nQ29udGV4dC5zdHlsZVJlbGF0aW9ucy5hcHBlbmQoeyBjb25zdF9jYXN0PEVs
ZW1lbnQmPihlbGVtZW50KSwgdHlwZSwgdmFsdWUgfSk7CisgICAgY2hlY2tpbmdDb250ZXh0LnN0
eWxlUmVsYXRpb25zLmFwcGVuZCh7IGVsZW1lbnQsIHR5cGUsIHZhbHVlIH0pOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgaXNGaXJzdENoaWxkRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50
KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RDaGlsZEVsZW1l
bnQoY28KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZpcnN0T2ZUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCiB7CiAgICAgZm9yIChjb25zdCBFbGVtZW50KiBz
aWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJs
aW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5n
KSkgewotICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcs
IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKKyAg
ICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpzaWJsaW5nLCBTdHlsZTo6
UmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAKICAgICAgICAgaWYgKHNpYmxpbmctPmhh
c1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c0JlZm9yZShTZQogICAgIGludCBj
b3VudCA9IDA7CiAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZl
cnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVu
dFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewogCi0gICAgICAgIGFkZFN0
eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqc2libGluZywgU2VsZWN0b3JDaGVja2VyOjpT
dHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOworICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0c05l
eHRTaWJsaW5nKTsKIAogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHNpYmxpbmctPmNoaWxkSW5k
ZXgoKTsKICAgICAgICAgaWYgKGluZGV4KSB7CkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGljIGlu
bGluZSBpbnQgY291bnRFbGVtZW50c09mVHlwZUJlZgogewogICAgIGludCBjb3VudCA9IDA7CiAg
ICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewotICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNo
ZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0c05leHRTaWJsaW5nKTsKKyAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0Nv
bnRleHQsICpzaWJsaW5nLCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAK
ICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICArK2Nv
dW50OwpAQCAtMzI4LDEzICszMjgsMTMgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBT
ZWxlY3RvckNoZQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29u
dGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsK
KyAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29udGV4dC5l
bGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCiAg
ICAgICAgICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50
KQogICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVj
dG9yRmFpbHNBbGxTaWJsaW5ncyk7CiAKLSAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hl
Y2tpbmdDb250ZXh0LCAqcHJldmlvdXNFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4
dFNpYmxpbmcpOworICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQs
ICpwcmV2aW91c0VsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsK
IAogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAg
ICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENv
bnRleHQuc2VsZWN0b3I7CkBAIC0zNDksMTIgKzM0OSwxMiBAQCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVw
ZGF0ZVdpdGhNYXRjaFR5cGUocmVzdWx0LCBtYXRjaFR5cGUpOwogICAgICAgICB9CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgYWRkU3R5bGVSZWxhdGlv
bihjaGVja2luZ0NvbnRleHQsICpjb250ZXh0LmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcpOworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5n
Q29udGV4dCwgKmNvbnRleHQuZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJl
dmlvdXNTaWJsaW5nKTsKIAogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5l
bGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7CiAgICAgICAg
IGZvciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENv
bnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKm5leHRDb250ZXh0LmVsZW1lbnQsIFN0
eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CisgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKm5leHRDb250ZXh0LmVsZW1lbnQsIFN0eWxlOjpSZWxh
dGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdu
b3JlRHluYW1pY1BzZXVkbzsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGlyZWN0QWRqYWNlbnRT
cGVjaWZpY2l0eSA9IDA7CkBAIC02ODIsNyArNjgyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKENoZWNraW5nQwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFkZFN0eWxl
UmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29udGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9u
OjpBZmZlY3RlZEJ5RW1wdHksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxh
dGlvbihjaGVja2luZ0NvbnRleHQsICpjb250ZXh0LmVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6
QWZmZWN0ZWRCeUVtcHR5LCByZXN1bHQpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgIH0KQEAgLTY5MSwxNSArNjkxLDE1IEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZShDaGVja2luZ0MKICAgICAgICAgICAgIGlmIChjb25zdCBFbGVtZW50KiBw
YXJlbnRFbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAg
ICBib29sIGlzRmlyc3RDaGlsZCA9IGlzRmlyc3RDaGlsZEVsZW1lbnQoZWxlbWVudCk7CiAgICAg
ICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgYWRkU3R5
bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkZpcnN0
Q2hpbGQpOwotICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0
LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RD
aGlsZFJ1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2lu
Z0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgICAg
ICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50
LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RDaGlsZDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZpcnN0
T2ZUeXBlOgogICAgICAgICAgICAgLy8gZmlyc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBl
bGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
ZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0
eWxlOjpSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBlbGVtZW50
LnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC03MDgs
MTUgKzcwOCwxNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAg
ICAgICAgICAgICBpZiAoY29uc3QgRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBpc0xhc3RDaGlsZCA9IHBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1l
bnQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzTGFzdENoaWxkKQotICAgICAgICAg
ICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5
bGVSZWxhdGlvbjo6TGFzdENoaWxkKTsKLSAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9u
KGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVu
QWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6TGFzdENo
aWxkKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KnBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENo
aWxkUnVsZXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBpc0xhc3RDaGlsZDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc0xhc3RPZlR5cGU6CiAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0
aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFy
ZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAg
YWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJl
bGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVt
ZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQ
YXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIHJldHVybiBpc0xhc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC50YWdRTmFt
ZSgpKTsKQEAgLTcyNiwyMCArNzI2LDIwIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShDaGVja2luZ0MKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxl
bWVudC5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQg
PSBpc0ZpcnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJvb2wgb25s
eUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0No
aWxkcmVuKCkgJiYgaXNMYXN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgICAg
IGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKLSAgICAgICAgICAg
ICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0
eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKTsKKyAgICAgICAg
ICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQs
IFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKKyAg
ICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVs
ZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMp
OwogICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKQotICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6
Rmlyc3RDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tp
bmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkZpcnN0Q2hpbGQpOwogICAgICAg
ICAgICAgICAgIGlmIChvbmx5Q2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVs
YXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpMYXN0Q2hpbGQp
OworICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
ZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpMYXN0Q2hpbGQpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBvbmx5Q2hpbGQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPbmx5T2ZUeXBlOgogICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2VsZWN0b3IgaXMgdmVyeSBzbG93LgogICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQoKSkgewotICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHls
ZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVs
YXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKKyAgICAg
ICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5
bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgICAgICAg
ICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxl
OjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwog
ICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGls
ZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBlbGVtZW50
LnRhZ1FOYW1lKCkpICYmIGlzTGFzdE9mVHlwZShlbGVtZW50LCBlbGVtZW50LnRhZ1FOYW1lKCkp
OwpAQCAtNzc4LDcgKzc3OCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShDaGVj
a2luZ0MKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NQbGFjZWhvbGRlclNob3duOgogICAgICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PihlbGVtZW50KSkgewotICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24o
Y2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpVbmlxdWUpOworICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHls
ZTo6UmVsYXRpb246OlVuaXF1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzkzLDEyICs3
OTMsMTIgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKENoZWNraW5nQwogICAgICAg
ICAgICAgICAgICAgICBzcGVjaWZpY2l0eSA9IENTU1NlbGVjdG9yOjphZGRTcGVjaWZpY2l0aWVz
KHNwZWNpZmljaXR5LCBzZWxlY3Rvckxpc3RTcGVjaWZpY2l0eSk7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVs
ZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOworICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHls
ZTo6UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCiAgICAgICAgICAgICAg
ICAgaW50IGNvdW50ID0gMTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JM
aXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci5zZWxlY3Rvckxpc3QoKSkgewogICAgICAgICAg
ICAgICAgICAgICBmb3IgKEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlUmVsYXRpb246
OkFmZmVjdHNOZXh0U2libGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0
c05leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWdub3Jl
ZFNwZWNpZmljaXR5OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoU2VsZWN0b3JM
aXN0KGNoZWNraW5nQ29udGV4dCwgY29udGV4dCwgKnNpYmxpbmcsICpzZWxlY3Rvckxpc3QsIGln
bm9yZWRTcGVjaWZpY2l0eSkpCkBAIC04MDYsNyArODA2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKENoZWNraW5nQwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gY291bnRFbGVtZW50
c0JlZm9yZShjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6
TnRoQ2hpbGRJbmRleCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpOdGhDaGlsZElu
ZGV4LCBjb3VudCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHNl
bGVjdG9yLm1hdGNoTnRoKGNvdW50KSkKQEAgLTgxOCw3ICs4MTgsNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAg
IGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZVJlbGF0aW9u
OjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3Rl
ZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDEgKyBj
b3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgZWxlbWVu
dC50YWdRTmFtZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3IubWF0Y2hOdGgoY291
bnQpKQpAQCAtODM1LDkgKzgzNSw5IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShD
aGVja2luZ0MKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICAgICAgc3BlY2lmaWNpdHkgPSBDU1NTZWxlY3Rvcjo6YWRkU3BlY2lmaWNpdGllcyhz
cGVjaWZpY2l0eSwgc2VsZWN0b3JMaXN0U3BlY2lmaWNpdHkpOwogCi0gICAgICAgICAgICAgICAg
ICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2lu
Z0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0
ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdD
b250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOworICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6
Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg2MCw3ICs4NjAsNyBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAgICAgICAgICAgICBpZiAoIXNl
bGVjdG9yLnBhcnNlTnRoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBp
ZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRF
bGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9u
YWxSdWxlcyk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRl
eHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJh
Y2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC05MDIsNyArOTAyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKENoZWNraW5nQwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIHJldHVybiBlbGVtZW50LmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9
PSBWaXNpdGVkTWF0Y2hUeXBlOjpFbmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0RyYWc6Ci0gICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29u
dGV4dCwgZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeURyYWcpOworICAgICAgICAg
ICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlOjpSZWxh
dGlvbjo6QWZmZWN0ZWRCeURyYWcpOwogCiAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZW5kZXJl
cigpICYmIGVsZW1lbnQucmVuZGVyZXIoKS0+aXNEcmFnZ2luZygpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtOTExLDcgKzkxMSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShDaGVja2luZ0MKICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzRm9jdXNQc2V1ZG9D
bGFzcyhlbGVtZW50KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3Zl
cjoKICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgZWxlbWVudC5pc0xpbmsoKSB8
fCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAg
ICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6QWZmZWN0ZWRCeUhvdmVyKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5
SG92ZXIpOwogCiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaG92ZXJlZCgpIHx8IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdF9jYXN0PEVsZW1lbnQm
PihlbGVtZW50KSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXIpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkxOSw3ICs5MTksNyBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6CiAgICAgICAgICAgICBpZiAobV9zdHJp
Y3RQYXJzaW5nIHx8IGVsZW1lbnQuaXNMaW5rKCkgfHwgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5R
dWlya3NNb2RlKGNvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmUp
OworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVt
ZW50LCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmUpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKGVsZW1lbnQuYWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3Jj
ZVBzZXVkb1N0YXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCY+KGVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NBY3RpdmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgJKHJldmlzaW9uIDE5NzYzNikKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIKKyNpbmNsdWRlICJTdHlsZVJlbGF0
aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC03NiwyOSArNzcsNiBAQCBwdWJsaWM6CiAKICAgICBTZWxlY3RvckNoZWNrZXIoRG9j
dW1lbnQmKTsKIAotICAgIHN0cnVjdCBTdHlsZVJlbGF0aW9uIHsKLSAgICAgICAgZW51bSBUeXBl
IHsKLSAgICAgICAgICAgIEFmZmVjdGVkQnlBY3RpdmUsCi0gICAgICAgICAgICBBZmZlY3RlZEJ5
RHJhZywKLSAgICAgICAgICAgIEFmZmVjdGVkQnlFbXB0eSwKLSAgICAgICAgICAgIEFmZmVjdGVk
QnlIb3ZlciwKLSAgICAgICAgICAgIEFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcsCi0gICAgICAg
ICAgICBBZmZlY3RzTmV4dFNpYmxpbmcsCi0gICAgICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcywKLSAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeUZp
cnN0Q2hpbGRSdWxlcywKLSAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFz
ZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcywKLSAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRC
eUxhc3RDaGlsZFJ1bGVzLAotICAgICAgICAgICAgRmlyc3RDaGlsZCwKLSAgICAgICAgICAgIExh
c3RDaGlsZCwKLSAgICAgICAgICAgIE50aENoaWxkSW5kZXgsCi0gICAgICAgICAgICBVbmlxdWUs
Ci0gICAgICAgIH07Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQ7Ci0gICAgICAgIFR5cGUgdHlw
ZTsKLSAgICAgICAgdW5zaWduZWQgdmFsdWU7Ci0gICAgfTsKLSAgICB1c2luZyBTdHlsZVJlbGF0
aW9ucyA9IFZlY3RvcjxTdHlsZVJlbGF0aW9uLCA4PjsKLQogICAgIHN0cnVjdCBDaGVja2luZ0Nv
bnRleHQgewogICAgICAgICBDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlIHJl
c29sdmluZ01vZGUpCiAgICAgICAgICAgICA6IHJlc29sdmluZ01vZGUocmVzb2x2aW5nTW9kZSkK
QEAgLTExMSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUgeyBudWxscHRyIH07CiAKICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2Vy
IHRvIGhhdmUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIHJldHVybiB2YWx1ZXMuIFRoaXMgcmVxdWly
ZXMgc29tZSBtb3JlIHdvcmsgaW4gdGhlIHNlbGVjdG9yIGNvbXBpbGVyLgotICAgICAgICBTdHls
ZVJlbGF0aW9ucyBzdHlsZVJlbGF0aW9uczsKKyAgICAgICAgU3R5bGU6OlJlbGF0aW9ucyBzdHls
ZVJlbGF0aW9uczsKICAgICAgICAgUHNldWRvSWRTZXQgcHNldWRvSURTZXQ7CiAgICAgfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMyAr
NjEsMTMgQEAgYm9vbCBTdHlsZU1lZGlhOjptYXRjaE1lZGl1bShjb25zdCBTdHJpbgogICAgIGlm
ICghZG9jdW1lbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IHJvb3RTdHlsZSA9IGRvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29sdmVyKCku
c3R5bGVGb3JFbGVtZW50KCpkb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LT5yZW5kZXJTdHlsZSgp
LCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyk7CisgICAgYXV0byByb290U3R5bGUgPSBkb2N1bWVu
dC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50
LCBkb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRl
clN0eWxlOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNl
dDo6Y3JlYXRlKCk7CiAgICAgaWYgKCFtZWRpYS0+cGFyc2UocXVlcnkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwodHlwZSgpLCBt
X2ZyYW1lLCByb290U3R5bGUuZ2V0KCkpOworICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Igc2NyZWVu
RXZhbCh0eXBlKCksIG1fZnJhbWUsIHJvb3RTdHlsZS5wdHIoKSk7CiAgICAgcmV0dXJuIHNjcmVl
bkV2YWwuZXZhbChtZWRpYS5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDcgKzI2Nyw3IEBAIFN0eWxlUmVz
b2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGQKICAgICAgICAgbV9tZWRpdW0gPSBzdGQ6
Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnlFdmFsdWF0b3I+KCJhbGwiKTsKIAogICAgIGlmIChyb290
KQotICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKnJvb3QsIG1f
ZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOworICAgICAg
ICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKnJvb3QsIG1fZG9jdW1lbnQu
cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRlclN0eWxlOwogCiAg
ICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9IHN0
ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeUV2YWx1YXRvcj4odmlldy0+bWVkaWFUeXBlKCksICZ2
aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpOwpAQCAtMzcxLDcgKzM3MSw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4g
cGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotUmVmPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0Jl
aGF2aW9yLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVj
dG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKK0VsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
LCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0JlaGF2aW9yLCBjb25zdCBSZW5kZXJSZWdp
b24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRl
cikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbkxvYWRQZW5kaW5nSW1hZ2VzKTsKIApAQCAt
Mzg2LDIwICszODYsMjIgQEAgUmVmPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZv
cgogICAgICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUu
c3R5bGUoKSkpOwogICAgIH0KIAorICAgIGF1dG8mIHN0eWxlID0gKnN0YXRlLnN0eWxlKCk7CisK
ICAgICBpZiAoZWxlbWVudC5pc0xpbmsoKSkgewotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJ
c0xpbmsodHJ1ZSk7CisgICAgICAgIHN0eWxlLnNldElzTGluayh0cnVlKTsKICAgICAgICAgRUlu
c2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpOwogICAgICAgICBp
ZiAobGlua1N0YXRlICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgICAgIGJvb2wgZm9yY2VW
aXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1l
bnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQpOwogICAgICAgICAgICAgaWYgKGZv
cmNlVmlzaXRlZCkKICAgICAgICAgICAgICAgICBsaW5rU3RhdGUgPSBJbnNpZGVWaXNpdGVkTGlu
azsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbnNpZGVMaW5rKGxpbmtT
dGF0ZSk7CisgICAgICAgIHN0eWxlLnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAK
ICAgICBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVs
ZW1lbnQoZWxlbWVudCk7CiAKLSAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxl
bWVudCwgc3RhdGUuc3R5bGUoKSwgbV9ydWxlU2V0cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigp
KTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0
cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKICAgICBjb2xsZWN0b3Iuc2V0UmVnaW9uRm9y
U3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsKICAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKG1fbWVk
aXVtLmdldCgpKTsKIApAQCAtNDA4LDYgKzQxMCwxNSBAQCBSZWY8UmVuZGVyU3R5bGU+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlRm9yCiAgICAgZWxzZQogICAgICAgICBjb2xsZWN0b3IubWF0Y2hBbGxS
dWxlcyhtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcywgbWF0Y2hpbmdCZWhhdmlvciAhPSBNYXRj
aEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CiAKKyAgICBpZiAoY29sbGVjdG9yLm1hdGNoZWRQc2V1
ZG9FbGVtZW50SWRzKCkpCisgICAgICAgIHN0eWxlLnNldEhhc1BzZXVkb1N0eWxlcyhjb2xsZWN0
b3IubWF0Y2hlZFBzZXVkb0VsZW1lbnRJZHMoKSk7CisKKyAgICAvLyBUaGlzIGlzIHJlcXVpcmVk
IGZvciBzdHlsZSBzaGFyaW5nLgorICAgIGlmIChjb2xsZWN0b3IuZGlkTWF0Y2hVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgIHN0eWxlLnNldFVuaXF1ZSgpOworCisgICAgYXV0
byBlbGVtZW50U3R5bGVSZWxhdGlvbnMgPSBTdHlsZTo6Y29tbWl0UmVsYXRpb25zVG9SZW5kZXJT
dHlsZShzdHlsZSwgZWxlbWVudCwgY29sbGVjdG9yLnN0eWxlUmVsYXRpb25zKCkpOworCiAgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLCBlbGVtZW50
KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0
IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgpAQCAtNDE4LDggKzQyOSw3IEBAIFJl
ZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3IKIAogICAgIHN0YXRlLmNsZWFy
KCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KIAotICAgIC8vIE5vdyByZXR1
cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKKyAgICByZXR1cm4g
eyBzdGF0ZS50YWtlU3R5bGUoKSwgV1RGTW92ZShlbGVtZW50U3R5bGVSZWxhdGlvbnMpIH07CiB9
CiAKIFJlZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFt
ZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKQEAgLTU1OCw3ICs1NjgsNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwCiAgICAgLy8gdGhvc2UgcnVsZXMu
CiAKICAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1bGVzLgotICAgIEVsZW1lbnRS
dWxlQ29sbGVjdG9yIGNvbGxlY3RvcihlbGVtZW50LCBtX3N0YXRlLnN0eWxlKCksIG1fcnVsZVNl
dHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CisgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3Ig
Y29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7
CiAgICAgY29sbGVjdG9yLnNldFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG9TdHlsZVJlcXVlc3Qp
OwogICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0obV9tZWRpdW0uZ2V0KCkpOwogICAgIGNvbGxlY3Rv
ci5tYXRjaFVBUnVsZXMoKTsKQEAgLTU2OCw2ICs1NzgsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpwCiAgICAgICAgIGNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1bGVz
KGZhbHNlKTsKICAgICB9CiAKKyAgICBBU1NFUlQoIWNvbGxlY3Rvci5tYXRjaGVkUHNldWRvRWxl
bWVudElkcygpKTsKKwogICAgIGlmIChjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLm1hdGNoZWRQ
cm9wZXJ0aWVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA0
MCw3ICsxMDUyLDcgQEAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOgog
CiAgICAgbV9zdGF0ZSA9IFN0YXRlKCplbGVtZW50LCBudWxscHRyKTsKIAotICAgIEVsZW1lbnRS
dWxlQ29sbGVjdG9yIGNvbGxlY3RvcigqZWxlbWVudCwgbnVsbHB0ciwgbV9ydWxlU2V0cywgbV9z
dGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0
b3IoKmVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CiAgICAg
Y29sbGVjdG9yLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMp
OwogICAgIGNvbGxlY3Rvci5zZXRQc2V1ZG9TdHlsZVJlcXVlc3QoUHNldWRvU3R5bGVSZXF1ZXN0
KHBzZXVkb0lkKSk7CiAgICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDgg
KzM0LDggQEAKICNpbmNsdWRlICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCi0jaW5jbHVkZSAiU2VsZWN0b3JD
aGVja2VyLmgiCiAjaW5jbHVkZSAiU3R5bGVJbmhlcml0ZWREYXRhLmgiCisjaW5jbHVkZSAiU3R5
bGVSZWxhdGlvbnMuaCIKICNpbmNsdWRlICJWaWV3cG9ydFN0eWxlUmVzb2x2ZXIuaCIKICNpbmNs
dWRlIDxiaXRzZXQ+CiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtNjQsNiArNjQsNyBAQCBjbGFzcyBD
U1NWYWx1ZTsKIGNsYXNzIENvbnRhaW5lck5vZGU7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVs
ZW1lbnQ7CitjbGFzcyBFbGVtZW50UnVsZUNvbGxlY3RvcjsKIGNsYXNzIEZyYW1lOwogY2xhc3Mg
RnJhbWVWaWV3OwogY2xhc3MgVVJMOwpAQCAtMTIzLDYgKzEyNCwxNiBAQCBwdWJsaWM6CiAgICAg
UmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXI7CiB9OwogCitzdHJ1Y3QgRWxlbWVudFN0eWxlIHsK
KyAgICBFbGVtZW50U3R5bGUoUmVmPFJlbmRlclN0eWxlPiYmIHJlbmRlclN0eWxlLCBzdGQ6OnVu
aXF1ZV9wdHI8U3R5bGU6OlJlbGF0aW9ucz4gcmVsYXRpb25zID0geyB9KQorICAgICAgICA6IHJl
bmRlclN0eWxlKFdURk1vdmUocmVuZGVyU3R5bGUpKQorICAgICAgICAsIHJlbGF0aW9ucyhXVEZN
b3ZlKHJlbGF0aW9ucykpCisgICAgeyB9CisKKyAgICBSZWY8UmVuZGVyU3R5bGU+IHJlbmRlclN0
eWxlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdHlsZTo6UmVsYXRpb25zPiByZWxhdGlvbnM7Cit9
OworCiAvLyBUaGlzIGNsYXNzIHNlbGVjdHMgYSBSZW5kZXJTdHlsZSBmb3IgYSBnaXZlbiBlbGVt
ZW50IGJhc2VkIG9uIGEgY29sbGVjdGlvbiBvZiBzdHlsZXNoZWV0cy4KIGNsYXNzIFN0eWxlUmVz
b2x2ZXIgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0eWxlUmVzb2x2ZXIpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKQEAgLTEzMCw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgU3R5bGVS
ZXNvbHZlcihEb2N1bWVudCYpOwogICAgIH5TdHlsZVJlc29sdmVyKCk7CiAKLSAgICBSZWY8UmVu
ZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChFbGVtZW50JiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0
eWxlLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciA9IE1hdGNoQWxsUnVsZXMsIGNvbnN0IFJlbmRlclJl
Z2lvbiogcmVnaW9uRm9yU3R5bGluZyA9IG51bGxwdHIsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiA9
IG51bGxwdHIpOworICAgIEVsZW1lbnRTdHlsZSBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIFJl
bmRlclN0eWxlKiBwYXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1
bGVzLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25z
dCBTZWxlY3RvckZpbHRlciogPSBudWxscHRyKTsKIAogICAgIHZvaWQga2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiwgS2V5ZnJhbWVMaXN0Jik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAJKHJl
dmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmgiCiAjaW5jbHVk
ZSAiU3RhY2tBbGxvY2F0b3IuaCIKKyNpbmNsdWRlICJTdHlsZVJlbGF0aW9ucy5oIgogI2luY2x1
ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9HUFJJbmZvLmg+
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTGlua0J1ZmZlci5oPgpAQCAtMzIzLDggKzMyNCw4
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc1RhcmdldChBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwogCiAgICAgLy8gSGVscGVycy4KLSAgICB2b2lkIGdl
bmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VHlwZSwgT3B0aW9u
YWw8QXNzZW1ibGVyOjpSZWdpc3RlcklEPiB2YWx1ZSA9IHsgfSk7Ci0gICAgdm9pZCBnZW5lcmF0
ZUFkZFN0eWxlUmVsYXRpb24oQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCwg
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxh
dGlvbjo6VHlwZSwgT3B0aW9uYWw8QXNzZW1ibGVyOjpSZWdpc3RlcklEPiB2YWx1ZSA9IHsgfSk7
CisgICAgdm9pZCBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OlR5cGUsIE9wdGlvbmFs
PEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUgPSB7IH0pOworICAgIHZvaWQgZ2VuZXJhdGVB
ZGRTdHlsZVJlbGF0aW9uKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQsIEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OlR5cGUsIE9wdGlv
bmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUgPSB7IH0pOwogICAgIEFzc2VtYmxlcjo6
SnVtcCBicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hlY2tpbmdDb250ZXh0KEFzc2VtYmxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0b3JDaGVja2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJl
Z2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICBBc3NlbWJsZXI6Okp1bXAgYnJhbmNoT25S
ZXNvbHZpbmdNb2RlKEFzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgU2VsZWN0b3JDaGVj
a2VyOjpNb2RlLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KTsKICAgICB2
b2lkIGdlbmVyYXRlRWxlbWVudElzRmlyc3RMaW5rKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1
cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQpOwpAQCAtMTg5MSw3ICsxODky
LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHNob3VsZE1hcmtTdHlsZUlzQWZmZWN0
ZWRCeVByZXZpb3VzU2libGluZyhmcmFnbWVudCkpCi0gICAgICAgICAgICBnZW5lcmF0ZUFkZFN0
eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVj
dG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7Cisg
ICAgICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1l
bnRBZGRyZXNzUmVnaXN0ZXIsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2li
bGluZyk7CiAgICAgICAgIGdlbmVyYXRlQmFja3RyYWNraW5nVGFpbHNJZk5lZWRlZChmYWlsdXJl
Q2FzZXMsIGZyYWdtZW50KTsKICAgICB9CiAKQEAgLTIxMzUsNyArMjEzNiw3IEBAIHZvaWQgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVdhbGsKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZURpcmVjdEFkamFjZW50VHJlZVdhbGtlcihBc3NlbWJsZXI6Okp1bXBMaXN0
JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewogICAg
IGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsK
LSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRy
ZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRT
aWJsaW5nKTsKKyAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVs
ZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5n
KTsKIAogICAgIEFzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hpbmdUYWdOYW1lRmFpbHVyZUNhc2Vz
OwogICAgIEFzc2VtYmxlcjo6SnVtcExpc3QgbWF0Y2hpbmdQb3N0VGFnTmFtZUZhaWx1cmVDYXNl
czsKQEAgLTIxNjAsNyArMjE2MSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5l
cmF0ZUluZGkKICAgICAgICAgbV9iYWNrdHJhY2tpbmdMZXZlbHMubGFzdCgpLmluZGlyZWN0QWRq
YWNlbnRUcmVlV2Fsa2VyQmFja3RyYWNraW5nUG9pbnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwog
CiAgICAgZ2VuZXJhdGVXYWxrVG9QcmV2aW91c0FkamFjZW50KGZhaWx1cmVDYXNlcywgZnJhZ21l
bnQpOwotICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVu
dEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3Rz
TmV4dFNpYmxpbmcpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5
bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RzTmV4dFNp
YmxpbmcpOwogCiAgICAgaWYgKGZyYWdtZW50LmJhY2t0cmFja2luZ0ZsYWdzICYgQmFja3RyYWNr
aW5nRmxhZzo6SW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQpCiAgICAgICAgIG1fYmFja3RyYWNr
aW5nTGV2ZWxzLmxhc3QoKS5pbmRpcmVjdEFkamFjZW50RW50cnlQb2ludCA9IG1fYXNzZW1ibGVy
LmxhYmVsKCk7CkBAIC0yMTcwLDcgKzIxNzEsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVJbmRpCiAgICAgbG9jYWxGYWlsdXJlQ2FzZXMubGlua1RvKGxvb3BTdGFydCwg
Jm1fYXNzZW1ibGVyKTsKIH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVs
ZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VHlwZSByZWxhdGlvblR5cGUs
IE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUpCit2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShBc3Nl
bWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpUeXBlIHJlbGF0aW9u
VHlwZSwgT3B0aW9uYWw8QXNzZW1ibGVyOjpSZWdpc3RlcklEPiB2YWx1ZSkKIHsKICAgICBpZiAo
bV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKQogICAg
ICAgICByZXR1cm47CkBAIC0yMTg1LDEwICsyMTg2LDEwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUFkZFMKIAogc3RhdGljIHZvaWQgYWRkU3R5bGVSZWxhdGlvbkZ1bmN0
aW9uKFNlbGVjdG9yQ2hlY2tlcjo6Q2hlY2tpbmdDb250ZXh0KiBjaGVja2luZ0NvbnRleHQsIEVs
ZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgY2hlY2tpbmdDb250ZXh0LT5zdHlsZVJlbGF0aW9ucy5h
cHBlbmQoeyAqZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3Rl
ZEJ5QWN0aXZlLCAxIH0pOworICAgIGNoZWNraW5nQ29udGV4dC0+c3R5bGVSZWxhdGlvbnMuYXBw
ZW5kKHsgKmVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2ZSwgMSB9KTsK
IH0KIAotdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkU3R5bGVSZWxhdGlv
bihBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0LCBBc3NlbWJsZXI6OlJlZ2lz
dGVySUQgZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpUeXBlIHJlbGF0
aW9uVHlwZSwgT3B0aW9uYWw8QXNzZW1ibGVyOjpSZWdpc3RlcklEPiB2YWx1ZSkKK3ZvaWQgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb24oQXNzZW1ibGVyOjpS
ZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQs
IFN0eWxlOjpSZWxhdGlvbjo6VHlwZSByZWxhdGlvblR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6
UmVnaXN0ZXJJRD4gdmFsdWUpCiB7CiAgICAgQVNTRVJUKG1fc2VsZWN0b3JDb250ZXh0ICE9IFNl
bGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rvcik7CiAKQEAgLTIxOTksMjAgKzIyMDAsMjAgQEAg
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkUwogICAgIGZ1bmN0aW9uQ2Fs
bC5jYWxsKCk7CiAKICAgICBBc3NlbWJsZXI6OkFkZHJlc3MgdmVjdG9yQWRkcmVzcyhjaGVja2lu
Z0NvbnRleHQsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4
dCwgc3R5bGVSZWxhdGlvbnMpKTsKLSAgICBhdXRvIGRhdGFBZGRyZXNzID0gdmVjdG9yQWRkcmVz
cy53aXRoT2Zmc2V0KFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbnM6OmRhdGFNZW1vcnlP
ZmZzZXQoKSk7Ci0gICAgYXV0byBzaXplQWRkcmVzcyA9IHZlY3RvckFkZHJlc3Mud2l0aE9mZnNl
dChTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb25zOjpzaXplTWVtb3J5T2Zmc2V0KCkpOwor
ICAgIGF1dG8gZGF0YUFkZHJlc3MgPSB2ZWN0b3JBZGRyZXNzLndpdGhPZmZzZXQoU3R5bGU6OlJl
bGF0aW9uczo6ZGF0YU1lbW9yeU9mZnNldCgpKTsKKyAgICBhdXRvIHNpemVBZGRyZXNzID0gdmVj
dG9yQWRkcmVzcy53aXRoT2Zmc2V0KFN0eWxlOjpSZWxhdGlvbnM6OnNpemVNZW1vcnlPZmZzZXQo
KSk7CiAKICAgICBMb2NhbFJlZ2lzdGVyIHJlbGF0aW9uUG9pbnRlcihtX3JlZ2lzdGVyQWxsb2Nh
dG9yKTsKICAgICBtX2Fzc2VtYmxlci5sb2FkMzIoc2l6ZUFkZHJlc3MsIHJlbGF0aW9uUG9pbnRl
cik7CiAgICAgbV9hc3NlbWJsZXIuc3ViMzIoQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHJl
bGF0aW9uUG9pbnRlcik7Ci0gICAgbV9hc3NlbWJsZXIubXVsMzIoQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoc2l6ZW9mKFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbikpLCByZWxhdGlvblBv
aW50ZXIsIHJlbGF0aW9uUG9pbnRlcik7CisgICAgbV9hc3NlbWJsZXIubXVsMzIoQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc2l6ZW9mKFN0eWxlOjpSZWxhdGlvbikpLCByZWxhdGlvblBvaW50ZXIs
IHJlbGF0aW9uUG9pbnRlcik7CiAgICAgbV9hc3NlbWJsZXIuYWRkUHRyKGRhdGFBZGRyZXNzLCBy
ZWxhdGlvblBvaW50ZXIpOwogCi0gICAgQXNzZW1ibGVyOjpBZGRyZXNzIHR5cGVBZGRyZXNzKHJl
bGF0aW9uUG9pbnRlciwgT0JKRUNUX09GRlNFVE9GKFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxh
dGlvbiwgdHlwZSkpOworICAgIEFzc2VtYmxlcjo6QWRkcmVzcyB0eXBlQWRkcmVzcyhyZWxhdGlv
blBvaW50ZXIsIE9CSkVDVF9PRkZTRVRPRihTdHlsZTo6UmVsYXRpb24sIHR5cGUpKTsKICAgICBt
X2Fzc2VtYmxlci5zdG9yZTMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHJlbGF0aW9uVHlwZSks
IHR5cGVBZGRyZXNzKTsKIAogICAgIGlmICh2YWx1ZSkgewotICAgICAgICBBc3NlbWJsZXI6OkFk
ZHJlc3MgdmFsdWVBZGRyZXNzKHJlbGF0aW9uUG9pbnRlciwgT0JKRUNUX09GRlNFVE9GKFNlbGVj
dG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbiwgdmFsdWUpKTsKKyAgICAgICAgQXNzZW1ibGVyOjpB
ZGRyZXNzIHZhbHVlQWRkcmVzcyhyZWxhdGlvblBvaW50ZXIsIE9CSkVDVF9PRkZTRVRPRihTdHls
ZTo6UmVsYXRpb24sIHZhbHVlKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLnN0b3JlMzIoKnZhbHVl
LCB2YWx1ZUFkZHJlc3MpOwogICAgIH0KIH0KQEAgLTMwNTYsNyArMzA1Nyw3IEBAIHZvaWQgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KIHsKICAgICBnZW5lcmF0ZVNwZWNpYWxG
YWlsdXJlSW5RdWlya3NNb2RlRm9yQWN0aXZlQW5kSG92ZXJJZk5lZWRlZChmYWlsdXJlQ2FzZXMs
IGZyYWdtZW50KTsKIAotICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5
bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9u
OjpBZmZlY3RlZEJ5QWN0aXZlKTsKKyAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29s
dmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0
ZWRCeUFjdGl2ZSk7CiAKICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVy
LCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMp
OwogICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxlbWVudElzQWN0aXZlKTsK
QEAgLTMxMDUsNyArMzEwNiw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZUVsZW0KICAgICBtX2Fzc2VtYmxlci5tb3ZlKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBp
c0VtcHR5UmVzdWx0cyk7CiAgICAgbm90RW1wdHkubGluaygmbV9hc3NlbWJsZXIpOwogCi0gICAg
Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1Jl
Z2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlFbXB0eSwg
QXNzZW1ibGVyOjpSZWdpc3RlcklEKGlzRW1wdHlSZXN1bHRzKSk7CisgICAgZ2VuZXJhdGVBZGRT
dHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHls
ZTo6UmVsYXRpb246OkFmZmVjdGVkQnlFbXB0eSwgQXNzZW1ibGVyOjpSZWdpc3RlcklEKGlzRW1w
dHlSZXN1bHRzKSk7CiAKICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5j
aFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIGlzRW1wdHlSZXN1bHRzKSk7CiB9CkBAIC0zMTQwLDE0
ICszMTQxLDE0IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAg
ICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKICAg
ICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdT
dHlsZShjaGVja2luZ0NvbnRleHQpOwogCi0gICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNo
ZWNraW5nQ29udGV4dCwgcGFyZW50RWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0
aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMpOworICAgIGdlbmVyYXRlQWRk
U3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxh
dGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKICAgICBtX3JlZ2lzdGVy
QWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdpc3RlcihwYXJlbnRFbGVtZW50KTsKIAogICAgIC8vIFRo
ZSBwYXJlbnQgbWFya2luZyBpcyB1bmNvbmRpdGlvbmFsLiBJZiB0aGUgbWF0Y2hpbmcgaXMgbm90
IGEgc3VjY2Vzcywgd2UgY2FuIG5vdyBmYWlsLgogICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVkIHRv
IGFwcGx5IHNldEZpcnN0Q2hpbGRTdGF0ZSgpIG9uIHRoZSBSZW5kZXJTdHlsZS4KICAgICBmYWls
dXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Ok5vblpl
cm8sIGlzRmlyc3RDaGlsZFJlZ2lzdGVyKSk7CiAKLSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRp
b24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNr
ZXI6OlN0eWxlUmVsYXRpb246OkZpcnN0Q2hpbGQpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxh
dGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFN0eWxlOjpSZWxh
dGlvbjo6Rmlyc3RDaGlsZCk7CiAKICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZtX2Fzc2Vt
Ymxlcik7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIo
QXNzZW1ibGVyOjpOb25aZXJvLCBpc0ZpcnN0Q2hpbGRSZWdpc3RlcikpOwpAQCAtMzE2Miw3ICsz
MTYzLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogewogICAg
IGdlbmVyYXRlU3BlY2lhbEZhaWx1cmVJblF1aXJrc01vZGVGb3JBY3RpdmVBbmRIb3ZlcklmTmVl
ZGVkKGZhaWx1cmVDYXNlcywgZnJhZ21lbnQpOwogCi0gICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0
aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNr
ZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlIb3Zlcik7CisgICAgZ2VuZXJhdGVBZGRTdHls
ZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6
UmVsYXRpb246OkFmZmVjdGVkQnlIb3Zlcik7CiAKICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25D
YWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBt
X2Z1bmN0aW9uQ2FsbHMpOwogICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxl
bWVudElzSG92ZXJlZCk7CkBAIC0zMjI0LDE0ICszMjI1LDE0IEBAIHZvaWQgU2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4
dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKICAgICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5n
U3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOwogCi0gICAg
Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgcGFyZW50RWxlbWVudCwg
U2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hp
bGRSdWxlcyk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
cGFyZW50RWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hp
bGRSdWxlcyk7CiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIocGFy
ZW50RWxlbWVudCk7CiAKICAgICAvLyBUaGUgcGFyZW50IG1hcmtpbmcgaXMgdW5jb25kaXRpb25h
bC4gSWYgdGhlIG1hdGNoaW5nIGlzIG5vdCBhIHN1Y2Nlc3MsIHdlIGNhbiBub3cgZmFpbC4KICAg
ICAvLyBPdGhlcndpc2Ugd2UgbmVlZCB0byBhcHBseSBzZXRMYXN0Q2hpbGRTdGF0ZSgpIG9uIHRo
ZSBSZW5kZXJTdHlsZS4KICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5j
aFRlc3QzMihBc3NlbWJsZXI6Ok5vblplcm8sIGlzTGFzdENoaWxkUmVnaXN0ZXIpKTsKIAotICAg
IGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNz
UmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6TGFzdENoaWxkKTsKKyAg
ICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50QWRkcmVz
c1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246Okxhc3RDaGlsZCk7CiAKICAgICBub3RSZXNvbHZp
bmdTdHlsZS5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fz
c2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpOb25aZXJvLCBpc0xhc3RDaGlsZFJlZ2lz
dGVyKSk7CkBAIC0zMjgzLDggKzMyODQsOCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtCiAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3Rl
ckFsbG9jYXRvcik7CiAgICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVt
cElmTm90UmVzb2x2aW5nU3R5bGUoY2hlY2tpbmdDb250ZXh0KTsKIAotICAgIGdlbmVyYXRlQWRk
U3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFNlbGVjdG9yQ2hl
Y2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsK
LSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBwYXJlbnRFbGVt
ZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUxh
c3RDaGlsZFJ1bGVzKTsKKyAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250
ZXh0LCBwYXJlbnRFbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZp
cnN0Q2hpbGRSdWxlcyk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29u
dGV4dCwgcGFyZW50RWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlM
YXN0Q2hpbGRSdWxlcyk7CiAKICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2NhdGVSZWdp
c3RlcihwYXJlbnRFbGVtZW50KTsKIApAQCAtMzI5Miw4ICszMjkzLDggQEAgdm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIC8vIE90aGVyd2lzZSB3ZSBuZWVkIHRv
IGFwcGx5IHNldExhc3RDaGlsZFN0YXRlKCkgb24gdGhlIFJlbmRlclN0eWxlLgogICAgIGZhaWx1
cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVy
bywgaXNPbmx5Q2hpbGRSZWdpc3RlcikpOwogCi0gICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9u
KGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2Vy
OjpTdHlsZVJlbGF0aW9uOjpGaXJzdENoaWxkKTsKLSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRp
b24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNr
ZXI6OlN0eWxlUmVsYXRpb246Okxhc3RDaGlsZCk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0
aW9uOjpGaXJzdENoaWxkKTsKKyAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdD
b250ZXh0LCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246Okxhc3RDaGls
ZCk7CiAKICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpOb25a
ZXJvLCBpc09ubHlDaGlsZFJlZ2lzdGVyKSk7CkBAIC0zMzAzLDcgKzMzMDQsNyBAQCBzdGF0aWMg
Ym9vbCBtYWtlQ29udGV4dFN0eWxlVW5pcXVlSWZOZWNlCiB7CiAgICAgaWYgKGlzPEhUTUxUZXh0
Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkpIHsKICAgICAgICAgaWYgKGNoZWNraW5nQ29u
dGV4dC0+cmVzb2x2aW5nTW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmluZ1N0
eWxlKQotICAgICAgICAgICAgY2hlY2tpbmdDb250ZXh0LT5zdHlsZVJlbGF0aW9ucy5hcHBlbmQo
eyAqZWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpVbmlxdWUsIDEgfSk7
CisgICAgICAgICAgICBjaGVja2luZ0NvbnRleHQtPnN0eWxlUmVsYXRpb25zLmFwcGVuZCh7ICpl
bGVtZW50LCBTdHlsZTo6UmVsYXRpb246OlVuaXF1ZSwgMSB9KTsKICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PigqZWxlbWVudCkuaXNQbGFjZWhvbGRl
clZpc2libGUoKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzQ1Nyw3ICszNDU4LDcg
QEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAoIWlzQWRqYWNlbnRSZWxhdGlvbihmcmFnbWVudC5yZWxhdGlvblRvUmln
aHRGcmFnbWVudCkpCi0gICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5n
U3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0
aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgZ2VuZXJhdGVBZGRTdHls
ZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6
UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCiAgICAgLy8gU2V0dXAgdGhl
IGNvdW50ZXIgYXQgMS4KICAgICBMb2NhbFJlZ2lzdGVyV2l0aFByZWZlcmVuY2UgZWxlbWVudENv
dW50ZXIobV9yZWdpc3RlckFsbG9jYXRvciwgSlNDOjpHUFJJbmZvOjphcmd1bWVudEdQUjEpOwpA
QCAtMzQ3NSw3ICszNDc2LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbQogCiAgICAgICAgIEFzc2VtYmxlcjo6SnVtcExpc3Qgbm9DYWNoZWRDaGlsZEluZGV4Q2Fz
ZXM7CiAgICAgICAgIGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudEVsZW1lbnQobm9Nb3Jl
U2libGluZ3NDYXNlcywgcHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgZ2VuZXJhdGVBZGRTdHls
ZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcsIFNlbGVjdG9yQ2hlY2tl
cjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKKyAgICAgICAgZ2VuZXJhdGVB
ZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcsIFN0eWxlOjpS
ZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKICAgICAgICAgbm9DYWNoZWRDaGlsZEluZGV4
Q2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIEFz
c2VtYmxlcjo6QWRkcmVzcyhwcmV2aW91c1NpYmxpbmcsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9m
ZnNldCgpKSwgQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0hhc1JhcmVEYXRhKCkp
KSk7CiAgICAgICAgIHsKICAgICAgICAgICAgIExvY2FsUmVnaXN0ZXIgZWxlbWVudFJhcmVEYXRh
KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwpAQCAtMzQ5MSwxMyArMzQ5MiwxMyBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAKICAgICAgICAgQXNzZW1ibGVyOjpMYWJl
bCBsb29wU3RhcnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwogICAgICAgICBnZW5lcmF0ZVdhbGtU
b1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZpb3VzU2li
bGluZyk7Ci0gICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUo
cHJldmlvdXNTaWJsaW5nLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdHNO
ZXh0U2libGluZyk7CisgICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5n
U3R5bGUocHJldmlvdXNTaWJsaW5nLCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdHNOZXh0U2libGlu
Zyk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZDMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEp
LCBlbGVtZW50Q291bnRlcik7CiAgICAgICAgIG1fYXNzZW1ibGVyLmp1bXAoKS5saW5rVG8obG9v
cFN0YXJ0LCAmbV9hc3NlbWJsZXIpOwogICAgICAgICBub01vcmVTaWJsaW5nc0Nhc2VzLmxpbmso
Jm1fYXNzZW1ibGVyKTsKICAgICB9CiAKLSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJl
c29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleCwgQXNzZW1ibGVyOjpSZWdpc3RlcklEKGVsZW1lbnRD
b3VudGVyKSk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShl
bGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246Ok50aENoaWxkSW5kZXgsIEFz
c2VtYmxlcjo6UmVnaXN0ZXJJRChlbGVtZW50Q291bnRlcikpOwogCiAgICAgZm9yIChjb25zdCBh
dXRvJiBzbG90IDogdmFsaWRTdWJzZXRGaWx0ZXJzKQogICAgICAgICBnZW5lcmF0ZU50aEZpbHRl
clRlc3QoZmFpbHVyZUNhc2VzLCBlbGVtZW50Q291bnRlciwgc2xvdC5maXJzdCwgc2xvdC5zZWNv
bmQpOwpAQCAtMzUyNCw3ICszNTI1LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWlzQWRqYWNlbnRSZWxhdGlv
bihmcmFnbWVudC5yZWxhdGlvblRvUmlnaHRGcmFnbWVudCkpCi0gICAgICAgIGdlbmVyYXRlQWRk
U3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsK
KyAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50
QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxp
bmcpOwogCiAgICAgZm9yIChjb25zdCBOdGhDaGlsZE9mU2VsZWN0b3JJbmZvKiBudGhDaGlsZE9m
U2VsZWN0b3JJbmZvIDogdmFsaWRTdWJzZXRGaWx0ZXJzKSB7CiAgICAgICAgIC8vIFNldHVwIHRo
ZSBjb3VudGVyIGF0IDEuCkBAIC0zNTQxLDcgKzM1NDIsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdl
bmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgICAgICAgICBBc3NlbWJsZXI6OkxhYmVsIGxvb3BT
dGFydCA9IG1fYXNzZW1ibGVyLmxhYmVsKCk7CiAKICAgICAgICAgICAgIGdlbmVyYXRlV2Fsa1Rv
UHJldmlvdXNBZGphY2VudEVsZW1lbnQobm9Nb3JlU2libGluZ3NDYXNlcywgcHJldmlvdXNTaWJs
aW5nKTsKLSAgICAgICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5
bGUocHJldmlvdXNTaWJsaW5nLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVj
dHNOZXh0U2libGluZyk7CisgICAgICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJl
c29sdmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RzTmV4
dFNpYmxpbmcpOwogCiAgICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IGxvY2FsRmFpbHVy
ZUNhc2VzOwogICAgICAgICAgICAgZ2VuZXJhdGVFbGVtZW50TWF0Y2hlc1NlbGVjdG9yTGlzdChs
b2NhbEZhaWx1cmVDYXNlcywgcHJldmlvdXNTaWJsaW5nLCBudGhDaGlsZE9mU2VsZWN0b3JJbmZv
LT5zZWxlY3Rvckxpc3QpOwpAQCAtMzU2NCw3ICszNTY1LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICBMb2NhbFJlZ2lzdGVyIHBhcmVudEVsZW1l
bnQobV9yZWdpc3RlckFsbG9jYXRvcik7CiAgICAgICAgIGdlbmVyYXRlV2Fsa1RvUGFyZW50RWxl
bWVudChmYWlsdXJlQ2FzZXMsIHBhcmVudEVsZW1lbnQpOwogCi0gICAgICAgIGdlbmVyYXRlQWRk
U3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUocGFyZW50RWxlbWVudCwgU2VsZWN0b3JDaGVj
a2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxS
dWxlcyk7CisgICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUo
cGFyZW50RWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2Fy
ZFBvc2l0aW9uYWxSdWxlcyk7CiAKICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2Vt
Ymxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpaZXJvLCBBc3NlbWJsZXI6OkFkZHJlc3MocGFy
ZW50RWxlbWVudCwgTm9kZTo6bm9kZUZsYWdzTWVtb3J5T2Zmc2V0KCkpLCBBc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMihOb2RlOjpmbGFnSXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCgpKSkpOwogCkBA
IC0zNjA3LDcgKzM2MDgsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVF
bGVtCiAgICAgICAgIExvY2FsUmVnaXN0ZXIgcGFyZW50RWxlbWVudChtX3JlZ2lzdGVyQWxsb2Nh
dG9yKTsKICAgICAgICAgZ2VuZXJhdGVXYWxrVG9QYXJlbnRFbGVtZW50KGZhaWx1cmVDYXNlcywg
cGFyZW50RWxlbWVudCk7CiAKLSAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNv
bHZpbmdTdHlsZShwYXJlbnRFbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246
OkNoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7
CisgICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUocGFyZW50
RWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2Vk
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwogCiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
bV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgQXNzZW1ibGVyOjpBZGRy
ZXNzKHBhcmVudEVsZW1lbnQsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNldCgpKSwgQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0lzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSkp
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBT
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDMyLDcg
KzIwMzIsMTEgQEAgUmVmPFJlbmRlclN0eWxlPiBEb2N1bWVudDo6c3R5bGVGb3JFbGVtZQogICAg
IFJlc291cmNlTG9hZFN1c3BlbmRlciBzdXNwZW5kZXI7CiAKICAgICBUZW1wb3JhcnlDaGFuZ2U8
Ym9vbD4gY2hhbmdlKG1faWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzLCB0cnVlKTsKLSAgICByZXR1
cm4gZWxlbWVudC5yZXNvbHZlU3R5bGUocGFyZW50U3R5bGUpOworICAgIGF1dG8gZWxlbWVudFN0
eWxlID0gZWxlbWVudC5yZXNvbHZlU3R5bGUocGFyZW50U3R5bGUpOworCisgICAgU3R5bGU6OmNv
bW1pdFJlbGF0aW9uc1RvRG9jdW1lbnQoV1RGTW92ZShlbGVtZW50U3R5bGUucmVsYXRpb25zKSk7
CisKKyAgICByZXR1cm4gV1RGTW92ZShlbGVtZW50U3R5bGUucmVuZGVyU3R5bGUpOwogfQogCiBi
b29sIERvY3VtZW50Ojp1cGRhdGVMYXlvdXRJZkRpbWVuc2lvbnNPdXRPZkRhdGUoRWxlbWVudCYg
ZWxlbWVudCwgRGltZW5zaW9uc0NoZWNrIGRpbWVuc2lvbnNDaGVjaykKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAgU3R5bGVSZXNvbHZl
ciYgRWxlbWVudDo6c3R5bGVSZXNvbHZlcigpCiAgICAgcmV0dXJuIGRvY3VtZW50KCkuZW5zdXJl
U3R5bGVSZXNvbHZlcigpOwogfQogCi1SZWY8UmVuZGVyU3R5bGU+IEVsZW1lbnQ6OnJlc29sdmVT
dHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCitFbGVtZW50U3R5bGUgRWxlbWVudDo6cmVz
b2x2ZVN0eWxlKFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSkKIHsKICAgICByZXR1cm4gc3R5bGVS
ZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqdGhpcywgcGFyZW50U3R5bGUpOwogfQpAQCAtMzI4
NywxMCArMzI4NywxMCBAQCB2b2lkIEVsZW1lbnQ6OmRpZERldGFjaFJlbmRlcmVycygpCiAgICAg
QVNTRVJUKGhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKIH0KIAotUmVmUHRyPFJl
bmRlclN0eWxlPiBFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRlclN0eWxlJiwg
UmVuZGVyU3R5bGUqKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSopCiB7CiAgICAgQVNTRVJUKGhhc0N1
c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gTnVsbG9wdDsKIH0KIAogdm9pZCBFbGVtZW50OjpjbG9uZUF0dHJpYnV0ZXNGcm9tRWxl
bWVudChjb25zdCBFbGVtZW50JiBvdGhlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkocmV2aXNp
b24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNiArNTIsNyBAQCBjbGFzcyBQbGF0Zm9ybVdoZWVsRXZlbnQ7CiBjbGFzcyBQc2V1
ZG9FbGVtZW50OwogY2xhc3MgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQ7CiBjbGFzcyBSZW5kZXJU
cmVlUG9zaXRpb247CitzdHJ1Y3QgRWxlbWVudFN0eWxlOwogCiBlbnVtIFNwZWxsY2hlY2tBdHRy
aWJ1dGVTdGF0ZSB7CiAgICAgU3BlbGxjaGVja0F0dHJpYnV0ZVRydWUsCkBAIC00NzksNyArNDgw
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRBdHRhY2hSZW5kZXJlcnMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgd2lsbERldGFjaFJlbmRlcmVycygpOwogICAgIHZpcnR1YWwgdm9pZCBk
aWREZXRhY2hSZW5kZXJlcnMoKTsKLSAgICB2aXJ0dWFsIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3Vz
dG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiBzaGFkb3dIb3N0U3R5bGUpOworICAgIHZpcnR1YWwgT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBy
ZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
c2hhZG93SG9zdFN0eWxlKTsKIAogICAgIExheW91dFJlY3QgYWJzb2x1dGVFdmVudEhhbmRsZXJC
b3VuZHMoYm9vbCYgaW5jbHVkZXNGaXhlZFBvc2l0aW9uRWxlbWVudHMpIG92ZXJyaWRlOwogCkBA
IC00OTgsNyArNDk5LDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKCk7Ci0gICAgUmVmPFJlbmRlclN0eWxlPiByZXNvbHZlU3R5bGUoUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKTsKKyAgICBFbGVtZW50U3R5bGUgcmVzb2x2ZVN0eWxlKFJlbmRl
clN0eWxlKiBwYXJlbnRTdHlsZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgaXNWaXNpYmxlSW5WaWV3
cG9ydENoYW5nZWQoKSB7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNw
cAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiUmVuZGVyRWxl
bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyUXVvdGUu
aCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNzYsOSArNzcsMTIgQEAgdm9pZCBQc2V1ZG9FbGVtZW50OjpjbGVhckhvc3RFbGVtZW50KCkK
ICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0cjsKIH0KIAotUmVmUHRyPFJlbmRlclN0eWxlPiBQ
c2V1ZG9FbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBQc2V1ZG9FbGVtZW50
OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHls
ZSopCiB7Ci0gICAgcmV0dXJuIG1faG9zdEVsZW1lbnQtPnJlbmRlcmVyKCktPmdldENhY2hlZFBz
ZXVkb1N0eWxlKG1fcHNldWRvSWQsICZwYXJlbnRTdHlsZSk7CisgICAgYXV0byogc3R5bGUgPSBt
X2hvc3RFbGVtZW50LT5yZW5kZXJlcigpLT5nZXRDYWNoZWRQc2V1ZG9TdHlsZShtX3BzZXVkb0lk
LCAmcGFyZW50U3R5bGUpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBOdWxsb3B0
OworICAgIHJldHVybiBFbGVtZW50U3R5bGUoKnN0eWxlKTsKIH0KIAogdm9pZCBQc2V1ZG9FbGVt
ZW50OjpkaWRBdHRhY2hSZW5kZXJlcnMoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1BzZXVk
b0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVu
dC5oCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBFbGVtZW50
KiBob3N0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faG9zdEVsZW1lbnQ7IH0KICAgICB2b2lk
IGNsZWFySG9zdEVsZW1lbnQoKTsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VzdG9tU3R5
bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFk
b3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2
ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRv
d0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRBdHRhY2hSZW5kZXJlcnMoKSBvdmVy
cmlkZTsKICAgICB2b2lkIGRpZFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UpIG92ZXJyaWRlOwog
ICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpIG92ZXJyaWRlOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
OTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw3ICs4Miw3IEBAIFN0cmluZ1dpdGhEaXJlY3Rpb24gSFRNTFRpdGxl
RWxlbWVudDo6Y28KICAgICBpZiAoUmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUgPSB0aGlzLT5j
b21wdXRlZFN0eWxlKCkpCiAgICAgICAgIGRpcmVjdGlvbiA9IGNvbXB1dGVkU3R5bGUtPmRpcmVj
dGlvbigpOwogICAgIGVsc2UgewotICAgICAgICBhdXRvIHN0eWxlID0gcmVzb2x2ZVN0eWxlKHBh
cmVudEVsZW1lbnQoKSA/IHBhcmVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKSA6IG51bGxwdHIp
OworICAgICAgICBhdXRvIHN0eWxlID0gc3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgq
dGhpcywgcGFyZW50RWxlbWVudCgpID8gcGFyZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpIDog
bnVsbHB0cikucmVuZGVyU3R5bGU7CiAgICAgICAgIGRpcmVjdGlvbiA9IHN0eWxlLmdldCgpLmRp
cmVjdGlvbigpOwogICAgIH0KICAgICByZXR1cm4gU3RyaW5nV2l0aERpcmVjdGlvbih0ZXh0KCks
IGRpcmVjdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVt
YkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Ns
aWRlclRodW1iRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0
LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAKICNpZiBFTkFCTEUoSU9TX1RPVUNIX0VWRU5UUykKICNpbmNsdWRlICJEb2N1bWVudC5o
IgpAQCAtNTczLDcgKzU3NCw3IEBAIEhUTUxJbnB1dEVsZW1lbnQqIFNsaWRlclRodW1iRWxlbWVu
dDo6aG8KICAgICByZXR1cm4gZG93bmNhc3Q8SFRNTElucHV0RWxlbWVudD4oc2hhZG93SG9zdCgp
KTsKIH0KIAotUmVmUHRyPFJlbmRlclN0eWxlPiBTbGlkZXJUaHVtYkVsZW1lbnQ6OmN1c3RvbVN0
eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQorT3B0
aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlkZXJUaHVtYkVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHls
ZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBk
b2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGlj
ayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9zdCBzdHlsZSBpcyBrbm93bi4KIApAQCAtNTgxLDcg
KzU4Miw3IEBAIFJlZlB0cjxSZW5kZXJTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50OjoKICAgICBz
dGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbWljU3RyaW5nPiBtZWRpYVNsaWRlclRodW1i
U2hhZG93UHNldWRvSWQoIi13ZWJraXQtbWVkaWEtc2xpZGVyLXRodW1iIiwgQXRvbWljU3RyaW5n
OjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAKICAgICBpZiAoIWhvc3RTdHlsZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBOdWxsb3B0OwogCiAgICAgc3dpdGNoICho
b3N0U3R5bGUtPmFwcGVhcmFuY2UoKSkgewogICAgIGNhc2UgTWVkaWFTbGlkZXJQYXJ0OgpAQCAt
NTk2LDcgKzU5Nyw3IEBAIFJlZlB0cjxSZW5kZXJTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50OjoK
ICAgICAgICAgbV9zaGFkb3dQc2V1ZG9JZCA9IHNsaWRlclRodW1iU2hhZG93UHNldWRvSWQ7CiAg
ICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgU2xpZGVyVGh1bWJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCgpIGNv
bnN0CkBAIC02MjcsNyArNjI4LDcgQEAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IFNsaWRlckNv
bnRhaW5lcgogICAgIHJldHVybiBjcmVhdGVSZW5kZXJlcjxSZW5kZXJTbGlkZXJDb250YWluZXI+
KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKLVJlZlB0cjxSZW5kZXJTdHlsZT4gU2xpZGVy
Q29udGFpbmVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYsIFJl
bmRlclN0eWxlKiBob3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IFNsaWRlckNvbnRh
aW5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxl
KiBob3N0U3R5bGUpCiB7CiAgICAgLy8gVGhpcyBkb2Vzbid0IGFjdHVhbGx5IGNvbXB1dGUgc3R5
bGUuIFRoaXMgaXMganVzdCBhIGhhY2sgdG8gcGljayBzaGFkb3cgcHNldWRvIGlkIHdoZW4gaG9z
dCBzdHlsZSBpcyBrbm93bi4KIApAQCAtNjM1LDcgKzYzNiw3IEBAIFJlZlB0cjxSZW5kZXJTdHls
ZT4gU2xpZGVyQ29udGFpbmVyRWxlbWUKICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Y29uc3Qg
QXRvbWljU3RyaW5nPiBzbGlkZXJDb250YWluZXIoIi13ZWJraXQtc2xpZGVyLWNvbnRhaW5lciIs
IEF0b21pY1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogCiAgICAgaWYgKCFob3N0U3R5
bGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKIAog
ICAgIHN3aXRjaCAoaG9zdFN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIE1lZGlhU2xp
ZGVyUGFydDoKQEAgLTY1MCw3ICs2NTEsNyBAQCBSZWZQdHI8UmVuZGVyU3R5bGU+IFNsaWRlckNv
bnRhaW5lckVsZW1lCiAgICAgICAgIG1fc2hhZG93UHNldWRvSWQgPSBzbGlkZXJDb250YWluZXI7
CiAgICAgfQogCi0gICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAK
IGNvbnN0IEF0b21pY1N0cmluZyYgU2xpZGVyQ29udGFpbmVyRWxlbWVudDo6c2hhZG93UHNldWRv
SWQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xpZGVy
VGh1bWJFbGVtZW50LmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
c2hhZG93L1NsaWRlclRodW1iRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3
IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICB2b2lkIHdpbGxEZXRhY2hSZW5kZXJlcnMoKSBvdmVy
cmlkZTsKIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VzdG9tU3R5bGVGb3JSZW5kZXJlcihS
ZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKikgb3ZlcnJpZGU7CisgICAgT3B0aW9uYWw8RWxlbWVu
dFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSopIG92
ZXJyaWRlOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIHZvaWQgc3RhcnREcmFnZ2luZygpOwpAQCAtMTM1LDcgKzEzNSw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU2xpZGVyQ29udGFpbmVyRWxlbWVudChEb2N1bWVudCYp
OwogICAgIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBjcmVhdGVFbGVtZW50UmVuZGVyZXIoUmVm
PFJlbmRlclN0eWxlPiYmLCBjb25zdCBSZW5kZXJUcmVlUG9zaXRpb24mKSBvdmVycmlkZTsKLSAg
ICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUm
LCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVz
b2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqKSBvdmVycmlkZTsKICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Qgb3ZlcnJpZGU7CiAK
ICAgICBBdG9taWNTdHJpbmcgbV9zaGFkb3dQc2V1ZG9JZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAko
cmV2aXNpb24gMTk3NjM3KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQAogI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiU2hhZG93Um9vdC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJUZXh0RXZlbnQuaCIKICNpbmNsdWRlICJUZXh0RXZlbnRJbnB1dFR5cGUuaCIKICNpbmNsdWRl
IDx3dGYvUmVmLmg+CkBAIC03NCw3ICs3NSw3IEBAIFJlZjxUZXh0Q29udHJvbElubmVyRWxlbWVu
dD4gVGV4dENvbnRyb2wKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0Q29udHJvbElubmVy
RWxlbWVudChkb2N1bWVudCkpOwogfQogCi1SZWZQdHI8UmVuZGVyU3R5bGU+IFRleHRDb250cm9s
SW5uZXJFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRlclN0eWxlJiwgUmVuZGVy
U3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gVGV4dENvbnRy
b2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0
eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7CiAgICAgYXV0byBpbm5lckNvbnRhaW5lclN0eWxlID0g
UmVuZGVyU3R5bGU6OmNyZWF0ZSgpOwogICAgIGlubmVyQ29udGFpbmVyU3R5bGUuZ2V0KCkuaW5o
ZXJpdEZyb20oc2hhZG93SG9zdFN0eWxlKTsKQEAgLTg4LDcgKzg5LDcgQEAgUmVmUHRyPFJlbmRl
clN0eWxlPiBUZXh0Q29udHJvbElubmVyRWxlbQogICAgIC8vIFdlIGRvbid0IHdhbnQgdGhlIHNo
YWRvdyBkb20gdG8gYmUgZWRpdGFibGUsIHNvIHdlIHNldCB0aGlzIGJsb2NrIHRvIHJlYWQtb25s
eSBpbiBjYXNlIHRoZSBpbnB1dCBpdHNlbGYgaXMgZWRpdGFibGUuCiAgICAgaW5uZXJDb250YWlu
ZXJTdHlsZS5nZXQoKS5zZXRVc2VyTW9kaWZ5KFJFQURfT05MWSk7CiAKLSAgICByZXR1cm4gV1RG
TW92ZShpbm5lckNvbnRhaW5lclN0eWxlKTsKKyAgICByZXR1cm4gRWxlbWVudFN0eWxlKFdURk1v
dmUoaW5uZXJDb250YWluZXJTdHlsZSkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KQEAgLTEzMyw5ICsxMzQsOSBAQCBSZW5kZXJUZXh0Q29udHJvbElubmVyQmxvY2sqIFRl
eHRDb250cm9sCiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sSW5uZXJCbG9j
az4oSFRNTERpdkVsZW1lbnQ6OnJlbmRlcmVyKCkpOwogfQogCi1SZWZQdHI8UmVuZGVyU3R5bGU+
IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5k
ZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50
U3R5bGU+IFRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJl
bmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKIHsKLSAgICByZXR1cm4g
ZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpzaGFkb3dIb3N0KCkpLmNyZWF0
ZUlubmVyVGV4dFN0eWxlKCpzaGFkb3dIb3N0U3R5bGUpOworICAgIHJldHVybiBFbGVtZW50U3R5
bGUoZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+KCpzaGFkb3dIb3N0KCkpLmNy
ZWF0ZUlubmVyVGV4dFN0eWxlKCpzaGFkb3dIb3N0U3R5bGUpKTsKIH0KIAogLy8gLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTQ3LDE4ICsxNDgsMTcgQEAgVGV4dENvbnRyb2xQbGFj
ZWhvbGRlckVsZW1lbnQ6OlRleHRDb250cgogICAgIHNldEhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNh
bGxiYWNrcygpOwogfQogCi1SZWZQdHI8UmVuZGVyU3R5bGU+IFRleHRDb250cm9sUGxhY2Vob2xk
ZXJFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRlclN0eWxlJiBwYXJlbnRTdHls
ZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
VGV4dENvbnRyb2xQbGFjZWhvbGRlckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7CiAgICAg
YXV0byBzdHlsZSA9IHJlc29sdmVTdHlsZSgmcGFyZW50U3R5bGUpOwogCiAgICAgYXV0byYgY29u
dHJvbEVsZW1lbnQgPSBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmNvbnRh
aW5pbmdTaGFkb3dSb290KCktPmhvc3QoKSk7Ci0gICAgc3R5bGUtPnNldERpc3BsYXkoY29udHJv
bEVsZW1lbnQuaXNQbGFjZWhvbGRlclZpc2libGUoKSA/IEJMT0NLIDogTk9ORSk7CisgICAgc3R5
bGUucmVuZGVyU3R5bGUtPnNldERpc3BsYXkoY29udHJvbEVsZW1lbnQuaXNQbGFjZWhvbGRlclZp
c2libGUoKSA/IEJMT0NLIDogTk9ORSk7CiAKICAgICBpZiAoaXM8SFRNTElucHV0RWxlbWVudD4o
Y29udHJvbEVsZW1lbnQpKSB7CiAgICAgICAgIGF1dG8mIGlucHV0RWxlbWVudCA9IGRvd25jYXN0
PEhUTUxJbnB1dEVsZW1lbnQ+KGNvbnRyb2xFbGVtZW50KTsKLSAgICAgICAgc3R5bGUtPnNldFRl
eHRPdmVyZmxvdyhpbnB1dEVsZW1lbnQuc2hvdWxkVHJ1bmNhdGVUZXh0KCpzaGFkb3dIb3N0U3R5
bGUpID8gVGV4dE92ZXJmbG93RWxsaXBzaXMgOiBUZXh0T3ZlcmZsb3dDbGlwKTsKKyAgICAgICAg
c3R5bGUucmVuZGVyU3R5bGUtPnNldFRleHRPdmVyZmxvdyhpbnB1dEVsZW1lbnQuc2hvdWxkVHJ1
bmNhdGVUZXh0KCpzaGFkb3dIb3N0U3R5bGUpID8gVGV4dE92ZXJmbG93RWxsaXBzaXMgOiBUZXh0
T3ZlcmZsb3dDbGlwKTsKICAgICB9Ci0KICAgICByZXR1cm4gV1RGTW92ZShzdHlsZSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9s
SW5uZXJFbGVtZW50cy5oCShyZXZpc2lvbiAxOTc2MzcpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBUZXh0Q29udHJvbElubmVyRWxl
bWVudChEb2N1bWVudCYpOwotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VzdG9tU3R5bGVGb3JS
ZW5kZXJlcihSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0
U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3Rv
bVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RT
dHlsZSkgb3ZlcnJpZGU7CiAKIHByaXZhdGU6CiAgICAgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KQEAgLTY1LDcgKzY1LDcgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoRG9jdW1lbnQmKTsK
ICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlZjxS
ZW5kZXJTdHlsZT4mJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJpZGU7Ci0gICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBjdXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBh
cmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKICAgICBi
b29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQog
ICAgIGJvb2wgaXNUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiB0cnVlOyB9CiB9OwpAQCAtNzcsNyArNzcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50KERvY3VtZW50Jik7CiAgICAgCi0gICAg
UmVmUHRyPFJlbmRlclN0eWxlPiBjdXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRlclN0eWxlJiBw
YXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CisgICAg
T3B0aW9uYWw8RWxlbWVudFN0eWxlPiByZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmIHBh
cmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKIH07CiAK
IGNsYXNzIFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbkVsZW1lbnQgZmluYWwgOiBwdWJsaWMgSFRN
TERpdkVsZW1lbnQgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc2LDkgKzE1NzYsOSBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50OjpnCiAgICAgYXV0byYgc3R5bGVSZXNv
bHZlciA9IGVsZW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpOwogCiAgICAgaWYgKHBzZXVkb1N0eWxl
UmVxdWVzdC5wc2V1ZG9JZCA9PSBGSVJTVF9MSU5FX0lOSEVSSVRFRCkgewotICAgICAgICBSZWZQ
dHI8UmVuZGVyU3R5bGU+IHJlc3VsdCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGVGb3JFbGVtZW50KCpl
bGVtZW50KCksIHBhcmVudFN0eWxlKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBzdHlsZVJlc29s
dmVyLnN0eWxlRm9yRWxlbWVudCgqZWxlbWVudCgpLCBwYXJlbnRTdHlsZSkucmVuZGVyU3R5bGU7
CiAgICAgICAgIHJlc3VsdC0+c2V0U3R5bGVUeXBlKEZJUlNUX0xJTkVfSU5IRVJJVEVEKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBXVEZNb3ZlKHJl
c3VsdCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIucHNldWRvU3R5bGVGb3JF
bGVtZW50KCplbGVtZW50KCksIHBzZXVkb1N0eWxlUmVxdWVzdCwgKnBhcmVudFN0eWxlKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck5hbWVkRmxvd0Zy
YWdtZW50LmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUyLDkgKzM1
Miw5IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IFJlbmRlck5hbWVkRmxvd0YKICAgICBBU1NF
UlQoIXJlbmRlcmVyLmlzQW5vbnltb3VzKCkpOwogCiAgICAgLy8gRklYTUU6IFJlZ2lvbiBzdHls
aW5nIGZhaWxzIGZvciBwc2V1ZG8tZWxlbWVudHMgYmVjYXVzZSB0aGUgcmVuZGVyZXJzIGRvbid0
IGhhdmUgYSBub2RlLgotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVuZGVyT2JqZWN0UmVnaW9u
U3R5bGUgPSByZW5kZXJlci5lbGVtZW50KCktPnN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1l
bnQoKnJlbmRlcmVyLmVsZW1lbnQoKSwgJnBhcmVudFN0eWxlLCBNYXRjaEFsbFJ1bGVzLCB0aGlz
KTsKKyAgICBhdXRvIHJlbmRlck9iamVjdFJlZ2lvblN0eWxlID0gcmVuZGVyZXIuZWxlbWVudCgp
LT5zdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KCpyZW5kZXJlci5lbGVtZW50KCksICZw
YXJlbnRTdHlsZSwgTWF0Y2hBbGxSdWxlcywgdGhpcykucmVuZGVyU3R5bGU7CiAKLSAgICByZXR1
cm4gcmVuZGVyT2JqZWN0UmVnaW9uU3R5bGUucmVsZWFzZSgpOworICAgIHJldHVybiBXVEZNb3Zl
KHJlbmRlck9iamVjdFJlZ2lvblN0eWxlKTsKIH0KIAogdm9pZCBSZW5kZXJOYW1lZEZsb3dGcmFn
bWVudDo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJlZ2lvbihSZW5kZXJFbGVtZW50JiByZW5kZXJl
cikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVsYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlbGF0aW9ucy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlbGF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiU3R5bGVSZWxhdGlvbnMuaCIKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2Ug
U3R5bGUgeworCitzdGQ6OnVuaXF1ZV9wdHI8UmVsYXRpb25zPiBjb21taXRSZWxhdGlvbnNUb1Jl
bmRlclN0eWxlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgUmVsYXRpb25zJiByZWxhdGlvbnMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbGF0aW9u
cz4gcmVtYWluaW5nUmVsYXRpb25zOworCisgICAgYXV0byBhcHBlbmRTdHlsZVJlbGF0aW9uID0g
WyZyZW1haW5pbmdSZWxhdGlvbnNdIChjb25zdCBSZWxhdGlvbiYgcmVsYXRpb24pIHsKKyAgICAg
ICAgaWYgKCFyZW1haW5pbmdSZWxhdGlvbnMpCisgICAgICAgICAgICByZW1haW5pbmdSZWxhdGlv
bnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFJlbGF0aW9ucz4oKTsKKyAgICAgICAgcmVtYWluaW5nUmVs
YXRpb25zLT5hcHBlbmQocmVsYXRpb24pOworICAgIH07CisKKyAgICBmb3IgKGF1dG8mIHJlbGF0
aW9uIDogcmVsYXRpb25zKSB7CisgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCAhPSAmZWxl
bWVudCkgeworICAgICAgICAgICAgYXBwZW5kU3R5bGVSZWxhdGlvbihyZWxhdGlvbik7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBzd2l0Y2ggKHJlbGF0aW9uLnR5
cGUpIHsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2ZToKKyAgICAgICAg
ICAgIHN0eWxlLnNldEFmZmVjdGVkQnlBY3RpdmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFJlbGF0aW9uOjpBZmZlY3RlZEJ5RHJhZzoKKyAgICAgICAgICAgIHN0eWxlLnNl
dEFmZmVjdGVkQnlEcmFnKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxh
dGlvbjo6QWZmZWN0ZWRCeUVtcHR5OgorICAgICAgICAgICAgc3R5bGUuc2V0RW1wdHlTdGF0ZShy
ZWxhdGlvbi52YWx1ZSk7CisgICAgICAgICAgICBhcHBlbmRTdHlsZVJlbGF0aW9uKHJlbGF0aW9u
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpBZmZlY3RlZEJ5
SG92ZXI6CisgICAgICAgICAgICBzdHlsZS5zZXRBZmZlY3RlZEJ5SG92ZXIoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpGaXJzdENoaWxkOgorICAgICAgICAg
ICAgc3R5bGUuc2V0Rmlyc3RDaGlsZFN0YXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBSZWxhdGlvbjo6TGFzdENoaWxkOgorICAgICAgICAgICAgc3R5bGUuc2V0TGFzdENo
aWxkU3RhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpV
bmlxdWU6CisgICAgICAgICAgICBzdHlsZS5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nOgorICAg
ICAgICBjYXNlIFJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmc6CisgICAgICAgIGNhc2UgUmVs
YXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzOgorICAgICAg
ICBjYXNlIFJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXM6CisgICAg
ICAgIGNhc2UgUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2Fy
ZFBvc2l0aW9uYWxSdWxlczoKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3Rl
ZEJ5TGFzdENoaWxkUnVsZXM6CisgICAgICAgIGNhc2UgUmVsYXRpb246Ok50aENoaWxkSW5kZXg6
CisgICAgICAgICAgICBhcHBlbmRTdHlsZVJlbGF0aW9uKHJlbGF0aW9uKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZW1haW5pbmdSZWxhdGlvbnM7
Cit9CisKK3ZvaWQgY29tbWl0UmVsYXRpb25zVG9Eb2N1bWVudChzdGQ6OnVuaXF1ZV9wdHI8UmVs
YXRpb25zPiByZWxhdGlvbnMpCit7CisgICAgaWYgKCFyZWxhdGlvbnMpCisgICAgICAgIHJldHVy
bjsKKyAgICBmb3IgKGF1dG8mIHJlbGF0aW9uIDogKnJlbGF0aW9ucykgeworICAgICAgICBhdXRv
JiBlbGVtZW50ID0gY29uc3RfY2FzdDxFbGVtZW50Jj4ocmVsYXRpb24uZWxlbWVudCk7CisgICAg
ICAgIHN3aXRjaCAocmVsYXRpb24udHlwZSkgeworICAgICAgICBjYXNlIFJlbGF0aW9uOjpBZmZl
Y3RlZEJ5QWN0aXZlOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlB
Y3RpdmUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpBZmZl
Y3RlZEJ5RHJhZzoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5RHJh
ZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVsYXRpb246OkFmZmVjdGVk
QnlFbXB0eToKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpBZmZlY3RlZEJ5SG92
ZXI6CisgICAgICAgICAgICBlbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUhvdmVyKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZp
b3VzU2libGluZzoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0U3R5bGVJc0FmZmVjdGVkQnlQcmV2
aW91c1NpYmxpbmcoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9u
OjpBZmZlY3RzTmV4dFNpYmxpbmc6CisgICAgICAgICAgICBlbGVtZW50LnNldEFmZmVjdHNOZXh0
U2libGluZ0VsZW1lbnRTdHlsZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzOgorICAg
ICAgICAgICAgZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxS
dWxlcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVsYXRpb246OkNoaWxk
cmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlczoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2hp
bGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3
YXJkUG9zaXRpb25hbFJ1bGVzOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcygpOworICAgICAgICAgICAgZWxlbWVudC5zZXRD
aGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlczoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZl
Y3RlZEJ5TGFzdENoaWxkUnVsZXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFJlbGF0aW9uOjpGaXJzdENoaWxkOgorICAgICAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gZWxl
bWVudC5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRGaXJzdENoaWxk
U3RhdGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpMYXN0
Q2hpbGQ6CisgICAgICAgICAgICBpZiAoYXV0byogc3R5bGUgPSBlbGVtZW50LnJlbmRlclN0eWxl
KCkpCisgICAgICAgICAgICAgICAgc3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleDoKKyAgICAg
ICAgICAgIGVsZW1lbnQuc2V0Q2hpbGRJbmRleChyZWxhdGlvbi52YWx1ZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6VW5pcXVlOgorICAgICAgICAgICAgaWYg
KGF1dG8qIHN0eWxlID0gZWxlbWVudC5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIHN0
eWxlLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
fQorCit9Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlbGF0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlUmVsYXRpb25zLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlbGF0aW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFN0eWxlUmVsYXRp
b25zX2gKKyNkZWZpbmUgU3R5bGVSZWxhdGlvbnNfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBSZW5kZXJT
dHlsZTsKKworbmFtZXNwYWNlIFN0eWxlIHsKKworc3RydWN0IFJlbGF0aW9uIHsKKyAgICBlbnVt
IFR5cGUgeworICAgICAgICBBZmZlY3RlZEJ5QWN0aXZlLAorICAgICAgICBBZmZlY3RlZEJ5RHJh
ZywKKyAgICAgICAgQWZmZWN0ZWRCeUVtcHR5LAorICAgICAgICBBZmZlY3RlZEJ5SG92ZXIsCisg
ICAgICAgIEFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcsCisgICAgICAgIEFmZmVjdHNOZXh0U2li
bGluZywKKyAgICAgICAgQ2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMs
CisgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcywKKyAgICAgICAgQ2hp
bGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzLAorICAg
ICAgICBDaGlsZHJlbkFmZmVjdGVkQnlMYXN0Q2hpbGRSdWxlcywKKyAgICAgICAgRmlyc3RDaGls
ZCwKKyAgICAgICAgTGFzdENoaWxkLAorICAgICAgICBOdGhDaGlsZEluZGV4LAorICAgICAgICBV
bmlxdWUsCisgICAgfTsKKyAgICBjb25zdCBFbGVtZW50JiBlbGVtZW50OworICAgIFR5cGUgdHlw
ZTsKKyAgICB1bnNpZ25lZCB2YWx1ZTsKKworICAgIFJlbGF0aW9uKGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQsIFR5cGUgdHlwZSwgdW5zaWduZWQgdmFsdWUgPSAxKQorICAgICAgICA6IGVsZW1lbnQo
ZWxlbWVudCkKKyAgICAgICAgLCB0eXBlKHR5cGUpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisg
ICAgeworICAgIH0KK307CisKK3VzaW5nIFJlbGF0aW9ucyA9IFZlY3RvcjxSZWxhdGlvbiwgOD47
CisKK3N0ZDo6dW5pcXVlX3B0cjxSZWxhdGlvbnM+IGNvbW1pdFJlbGF0aW9uc1RvUmVuZGVyU3R5
bGUoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50JiwgY29uc3QgUmVsYXRpb25zJik7Cit2b2lk
IGNvbW1pdFJlbGF0aW9uc1RvRG9jdW1lbnQoc3RkOjp1bmlxdWVfcHRyPFJlbGF0aW9ucz4pOwor
Cit9Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTaGFyaW5n
UmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlU2hh
cmluZ1Jlc29sdmVyLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNyArMzIy
LDcgQEAgYm9vbCBTaGFyaW5nUmVzb2x2ZXI6OnN0eWxlU2hhcmluZ0NhbmRpZAogICAgIGlmICgh
cnVsZVNldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3IgY29sbGVjdG9yKGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCY+KGVsZW1lbnQpLCBudWxscHRy
LCBtX3J1bGVTZXRzLCAmbV9zZWxlY3RvckZpbHRlcik7CisgICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3IgY29sbGVjdG9yKGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCY+KGVsZW1lbnQpLCBtX3J1bGVT
ZXRzLCAmbV9zZWxlY3RvckZpbHRlcik7CiAgICAgcmV0dXJuIGNvbGxlY3Rvci5oYXNBbnlNYXRj
aGluZ1J1bGVzKHJ1bGVTZXQpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVRyZWVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVUcmVlUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSwxNyArMTc5
LDIwIEBAIFJlZjxSZW5kZXJTdHlsZT4gVHJlZVJlc29sdmVyOjpzdHlsZUZvckUKICAgICB9CiAK
ICAgICBpZiAoZWxlbWVudC5oYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSkgewotICAg
ICAgICBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgaWYg
KGF1dG8qIHNoYWRvd1Jvb3QgPSBzY29wZSgpLnNoYWRvd1Jvb3QpCi0gICAgICAgICAgICBzaGFk
b3dIb3N0U3R5bGUgPSBzaGFkb3dSb290LT5ob3N0KCktPnJlbmRlclN0eWxlKCk7Ci0gICAgICAg
IGlmIChSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gZWxlbWVudC5jdXN0b21TdHlsZUZvclJl
bmRlcmVyKGluaGVyaXRlZFN0eWxlLCBzaGFkb3dIb3N0U3R5bGUpKQotICAgICAgICAgICAgcmV0
dXJuIHN0eWxlLnJlbGVhc2VOb25OdWxsKCk7CisgICAgICAgIFJlbmRlclN0eWxlKiBzaGFkb3dI
b3N0U3R5bGUgPSBzY29wZSgpLnNoYWRvd1Jvb3QgPyBzY29wZSgpLnNoYWRvd1Jvb3QtPmhvc3Qo
KS0+cmVuZGVyU3R5bGUoKSA6IG51bGxwdHI7CisgICAgICAgIGlmIChhdXRvIGN1c3RvbVN0eWxl
ID0gZWxlbWVudC5yZXNvbHZlQ3VzdG9tU3R5bGUoaW5oZXJpdGVkU3R5bGUsIHNoYWRvd0hvc3RT
dHlsZSkpIHsKKyAgICAgICAgICAgIFN0eWxlOjpjb21taXRSZWxhdGlvbnNUb0RvY3VtZW50KFdU
Rk1vdmUoY3VzdG9tU3R5bGUtPnJlbGF0aW9ucykpOworICAgICAgICAgICAgcmV0dXJuIFdURk1v
dmUoY3VzdG9tU3R5bGUtPnJlbmRlclN0eWxlKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlm
IChhdXRvKiBzaGFyaW5nRWxlbWVudCA9IHNjb3BlKCkuc2hhcmluZ1Jlc29sdmVyLnJlc29sdmUo
ZWxlbWVudCkpCiAgICAgICAgIHJldHVybiAqc2hhcmluZ0VsZW1lbnQtPnJlbmRlclN0eWxlKCk7
CiAKLSAgICByZXR1cm4gc2NvcGUoKS5zdHlsZVJlc29sdmVyLnN0eWxlRm9yRWxlbWVudChlbGVt
ZW50LCAmaW5oZXJpdGVkU3R5bGUsIE1hdGNoQWxsUnVsZXMsIG51bGxwdHIsICZzY29wZSgpLnNl
bGVjdG9yRmlsdGVyKTsKKyAgICBhdXRvIGVsZW1lbnRTdHlsZSA9IHNjb3BlKCkuc3R5bGVSZXNv
bHZlci5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgJmluaGVyaXRlZFN0eWxlLCBNYXRjaEFsbFJ1
bGVzLCBudWxscHRyLCAmc2NvcGUoKS5zZWxlY3RvckZpbHRlcik7CisKKyAgICBTdHlsZTo6Y29t
bWl0UmVsYXRpb25zVG9Eb2N1bWVudChXVEZNb3ZlKGVsZW1lbnRTdHlsZS5yZWxhdGlvbnMpKTsK
KyAgICByZXR1cm4gV1RGTW92ZShlbGVtZW50U3R5bGUucmVuZGVyU3R5bGUpOwogfQogCiAjaWYg
RU5BQkxFKENTU19SRUdJT05TKQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVl
UmVzb2x2ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVS
ZXNvbHZlci5oCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHls
ZVRyZWVSZXNvbHZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNs
dWRlICJSZW5kZXJTdHlsZUNvbnN0YW50cy5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVQb3NpdGlv
bi5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgogI2luY2x1ZGUgIlNlbGVjdG9yRmls
dGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVDaGFuZ2UuaCIKICNpbmNsdWRlICJTdHlsZVNoYXJpbmdS
ZXNvbHZlci5oIgpAQCAtNjIsNiArNjMsNyBAQCBwcml2YXRlOgogICAgIENoYW5nZSByZXNvbHZl
RWxlbWVudChFbGVtZW50Jik7CiAgICAgdm9pZCByZXNvbHZlQmVmb3JlT3JBZnRlclBzZXVkb0Vs
ZW1lbnQoRWxlbWVudCYsIENoYW5nZSwgUHNldWRvSWQsIFJlbmRlclRyZWVQb3NpdGlvbiYpOwog
CisKICAgICB2b2lkIGNyZWF0ZVJlbmRlclRyZWVSZWN1cnNpdmVseShFbGVtZW50JiwgUmVuZGVy
U3R5bGUmLCBSZW5kZXJUcmVlUG9zaXRpb24mLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiYgcmVzb2x2
ZWRTdHlsZSk7CiAgICAgdm9pZCBjcmVhdGVSZW5kZXJlcihFbGVtZW50JiwgUmVuZGVyVHJlZVBv
c2l0aW9uJiwgUmVmUHRyPFJlbmRlclN0eWxlPiYmIHJlc29sdmVkU3R5bGUpOwogICAgIHZvaWQg
Y3JlYXRlUmVuZGVyVHJlZUZvckJlZm9yZU9yQWZ0ZXJQc2V1ZG9FbGVtZW50KEVsZW1lbnQmLCBQ
c2V1ZG9JZCwgUmVuZGVyVHJlZVBvc2l0aW9uJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4OCwxMSArNzg4LDExIEBAIHZvaWQgU1ZHRWxlbWVu
dDo6c3luY2hyb25pemVTeXN0ZW1MYW5ndWEKICAgICBjb250ZXh0RWxlbWVudC0+c3luY2hyb25p
emVTeXN0ZW1MYW5ndWFnZSgpOwogfQogCi1SZWZQdHI8UmVuZGVyU3R5bGU+IFNWR0VsZW1lbnQ6
OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJT
dHlsZSopCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IFNWR0VsZW1lbnQ6OnJlc29sdmVDdXN0b21T
dHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKIHsKICAgICAvLyBJ
ZiB0aGUgZWxlbWVudCBpcyBpbiBhIDx1c2U+IHRyZWUgd2UgZ2V0IHRoZSBzdHlsZSBmcm9tIHRo
ZSBkZWZpbml0aW9uIHRyZWUuCiAgICAgaWYgKGF1dG8qIHN0eWxlRWxlbWVudCA9IHRoaXMtPmNv
cnJlc3BvbmRpbmdFbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBzdHlsZUVsZW1lbnQtPnN0eWxl
UmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnN0eWxlRWxlbWVudCwgJnBhcmVudFN0eWxlKTsK
KyAgICAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+cmVzb2x2ZVN0eWxlKCZwYXJlbnRTdHlsZSk7
CiAKICAgICByZXR1cm4gcmVzb2x2ZVN0eWxlKCZwYXJlbnRTdHlsZSk7CiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzeW5jaHJvbml6ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKSBjb25zdDsKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZUFsbEFuaW1hdGVkU1ZH
QXR0cmlidXRlKFNWR0VsZW1lbnQqKTsKICAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1c3Rv
bVN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
c2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJl
c29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBz
aGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogCiAgICAgc3RhdGljIHZvaWQgc3luY2hyb25pemVS
ZXF1aXJlZEZlYXR1cmVzKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKICAgICBzdGF0aWMg
dm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRXh0ZW5zaW9ucyhTVkdFbGVtZW50KiBjb250ZXh0RWxl
bWVudCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnRSYXJlRGF0YS5oCShyZXZp
c2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIGlmICghbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgfHwgbV9uZWVkc092
ZXJyaWRlQ29tcHV0ZWRTdHlsZVVwZGF0ZSkgewogICAgICAgICAgICAgLy8gVGhlIHN0eWxlIGNv
bXB1dGVkIGhlcmUgY29udGFpbnMgbm8gQ1NTIEFuaW1hdGlvbnMvVHJhbnNpdGlvbnMgb3IgU01J
TCBpbmR1Y2VkIHJ1bGVzIC0gdGhpcyBpcyBuZWVkZWQgdG8gY29tcHV0ZSB0aGUgImJhc2UgdmFs
dWUiIGZvciB0aGUgU01JTCBhbmltYXRpb24gc2FuZHdoaWNoIG1vZGVsLgotICAgICAgICAgICAg
bV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgPSBlbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZv
ckVsZW1lbnQoZWxlbWVudCwgcGFyZW50U3R5bGUsIE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlM
KTsKKyAgICAgICAgICAgIG1fb3ZlcnJpZGVDb21wdXRlZFN0eWxlID0gZWxlbWVudC5zdHlsZVJl
c29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KGVsZW1lbnQsIHBhcmVudFN0eWxlLCBNYXRjaEFsbFJ1
bGVzRXhjbHVkaW5nU01JTCkucmVuZGVyU3R5bGU7CiAgICAgICAgICAgICBtX25lZWRzT3ZlcnJp
ZGVDb21wdXRlZFN0eWxlVXBkYXRlID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJU
KG1fb3ZlcnJpZGVDb21wdXRlZFN0eWxlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273186</attachid>
            <date>2016-03-07 09:21:34 -0800</date>
            <delta_ts>2016-03-07 09:45:05 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-relations-4.patch</filename>
            <type>text/plain</type>
            <size>95105</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NSBAQAorMjAxNi0wMy0wNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3Igc2hvdWxkIG5vdCBtdXRhdGUgZG9jdW1lbnQgYW5kIHN0eWxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxMTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3ZlIGFwcGx5aW5nIG9mIHN0eWxlIHJl
bGF0aW9ucyBvdXQgb2YgRWxlbWVudFJ1bGVDb2xsZWN0b3IgYW5kIFN0eWxlUmVzb2x2ZXIuCisg
ICAgICAgIFRoaXMgZ2V0cyB1cyBjbG9zZXIgdG8gbWFraW5nIFN0eWxlUmVzb2x2ZXIgY29uc3Qg
Zm9yIEVsZW1lbnQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0VsZW1lbnRSdWxl
Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpF
bGVtZW50UnVsZUNvbGxlY3Rvcik6CisKKyAgICAgICAgICAgIE5vIG5lZWQgZm9yIHN0eWxlIHBh
cmFtZXRlciBhbnltb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rv
cjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVD
b2xsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMpOgorCisgICAgICAgICAgICBDbGll
bnQgd2lsbCBub3cgZG8gdGhlIHN0eWxlIGFuZCBlbGVtZW50IG11dGF0aW9ucy4gSnVzdCBjb2xs
ZWN0IHRoZSBkYXRhIGhlcmUuCisKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFJ1bGVDb2xsZWN0b3I6OmNvbW1pdFN0eWxlUmVsYXRpb25zKTogRGVsZXRlZC4KKworICAg
ICAgICAgICAgTW92ZXMgdG8gU3R5bGVSZWxhdGlvbnMuY3BwCisKKyAgICAgICAgKiBjc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVj
dG9yOjpoYXNNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xs
ZWN0b3I6Om1hdGNoZWRQc2V1ZG9FbGVtZW50SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRSdWxlQ29sbGVjdG9yOjpzdHlsZVJlbGF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50UnVsZUNvbGxlY3Rvcjo6ZGlkTWF0Y2hVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKToKKyAg
ICAgICAgKiBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFRdWVyeU1hdGNoZXI6OnByZXBhcmVFdmFsdWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0eWxlUmVsYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6aXNGaXJzdENoaWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjppc0ZpcnN0T2ZU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Y291bnRFbGVtZW50c09mVHlwZUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ6OkNo
ZWNraW5nQ29udGV4dCk6CisgICAgICAgICogY3NzL1N0eWxlTWVkaWEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVNZWRpYTo6bWF0Y2hNZWRpdW0pOgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNBdFNoYWRvd0JvdW5kYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisKKyAgICAgICAgICAgIEFw
cGx5IHRoZSBzdHlsZSByZWxhdGlvbnMgYWZmZWN0aW5nIGN1cnJlbnQgc3R5bGUgaW1tZWRpYXRl
bHkuCisgICAgICAgICAgICBQYXNzIHRoZSByZXN0IHRvIHRoZSBjbGllbnQuCisKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAg
ICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFN0eWxl
OjpFbGVtZW50U3R5bGUpOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyRXhjbHVkaW5nUHNl
dWRvRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZURpcmVjdEFkamFjZW50VHJlZVdhbGtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlSW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6YWRkU3R5bGVSZWxhdGlvbkZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50SXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50SXNGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNIb3ZlcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVFbGVtZW50SXNMYXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc09ubHlDaGlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVl
SWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
SXNOdGhDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzTnRoQ2hpbGRPZik6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbWVudElzTnRoTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNOdGhMYXN0Q2hpbGRP
Zik6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cyk6CisKKyAgICAg
ICAgICAgIEFwcGx5IHN0eWxlIHJlbGF0aW9ucy4KKworICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVwZGF0ZUxheW91dElmRGltZW5zaW9uc091dE9mRGF0ZSk6CisgICAgICAgICogZG9tL0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c3R5bGVSZXNvbHZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZlU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6ZGlkRGV0YWNoUmVuZGVyZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisKKyAgICAgICAgICAgIFJldHVybiBFbGVtZW50U3R5
bGUgKHdoaWNoIGNvbnRhaW5zIHN0eWxlIHJlbGF0aW9ucyBhbG9uZyB3aXRoIHRoZSByZW5kZXIg
c3R5bGUpLgorICAgICAgICAgICAgUmVuYW1lIGZvciBjb25zaXN0ZW5jeS4KKworICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERlbGV0ZWQuCisgICAg
ICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzVmlzaWJs
ZUluVmlld3BvcnRDaGFuZ2VkKToKKyAgICAgICAgKiBkb20vUHNldWRvRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpjbGVhckhvc3RFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpkaWRBdHRhY2hSZW5kZXJlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6UHNldWRvRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL1BzZXVkb0VsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUaXRs
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6Y29tcHV0
ZWRUZXh0V2l0aERpcmVjdGlvbik6CisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6aG9zdElu
cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6cmVzb2x2ZUN1c3Rv
bVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6c2hhZG93UHNl
dWRvSWQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlckNvbnRhaW5lckVsZW1l
bnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJDb250YWlu
ZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVt
YkVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERl
bGV0ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3Rv
bVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50
OjpUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVu
dDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERl
bGV0ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJl
Z2lvbik6CisgICAgICAgICogc3R5bGUvU3R5bGVSZWxhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpjb21taXRSZWxhdGlvbnNUb1JlbmRlclN0eWxlKToKKworICAg
ICAgICAgICAgQ29tbWl0IHJlbGF0aW9ucyBhZmZlY3Rpbmcgc3R5bGUgdGhhdGlzIGJlaW5nIGNv
bXB1dGVkLgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Y29tbWl0UmVsYXRpb25zVG9Eb2N1
bWVudCk6CisKKyAgICAgICAgICAgIENvbW1pdCByZWxhdGlvbnMgdGhhdCBtdXRhdGUgZG9jdW1l
bnQuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlbGF0aW9ucy5oOiBBZGRlZC4KKworICAgICAg
ICAgICAgRmFjdG9yIHN0eWxlIHJlbGF0aW9uIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25z
IHRvIGEgZmlsZSBvZiB0aGVpciBvd24uCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSZWxh
dGlvbjo6UmVsYXRpb24pOgorICAgICAgICAqIHN0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5nUmVzb2x2ZXI6OnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VHJlZVJlc29sdmVyOjpzdHlsZUZv
ckVsZW1lbnQpOgorCisgICAgICAgICAgICBBcHBseSBzdHlsZSByZWxhdGlvbnMuCisKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXplU3lzdGVtTGFu
Z3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVEYXRh
OjpvdmVycmlkZUNvbXB1dGVkU3R5bGUpOgorCiAyMDE2LTAzLTA3ICBBbmRyZWFzIEtsaW5nICA8
YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFJlbmRlclN0eWxlIGNvcHktb24td3Jp
dGUgYSBiaXQgbGVzcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTc2MzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjYy
OSw2ICsyNjI5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHN0eWxlL1JlbmRlclRyZWVQ
b3NpdGlvbi5jcHAKICAgICBzdHlsZS9TdHlsZUNoYW5nZS5jcHAKICAgICBzdHlsZS9TdHlsZUZv
bnRTaXplRnVuY3Rpb25zLmNwcAorICAgIHN0eWxlL1N0eWxlUmVsYXRpb25zLmNwcAogICAgIHN0
eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAogICAgIHN0eWxlL1N0eWxlU2hhcmluZ1Jl
c29sdmVyLmNwcAogICAgIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjE5LDYgKzY2MTksOCBAQAogCQlFNDUzOTA0OTBF
QUZENjM3MDAzNjk1QzggLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDM4MEVBRkQ2MzcwMDM2
OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICovOyB9OwogCQlFNDUzOTA0RDBF
QUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElP
Uy5tbSAqLzsgfTsKIAkJRTQ1MzkwQUUwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlP
Uy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUz
OTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLzsgfTsKKwkJRTQ2
MTgwMkQxQzhERDI5MDAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMg
LyogU3R5bGVSZWxhdGlvbnMuaCAqLzsgfTsKKwkJRTQ2MTgwMkYxQzhERDREMjAwMjZDMDJDIC8q
IFN0eWxlUmVsYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0NjE4MDJFMUM4REQ0RDIwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5jcHAg
Ki87IH07CiAJCUU0NjFENjVEMUJCMEM3RjAwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYxRDY1
QzFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuY3BwICovOyB9OwogCQlFNDYx
RDY1RjFCQjBDODBEMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjFENjVFMUJCMEM4MEQwMENCNTY0
NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5oICovOyB9OwogCQlFNDYyQTRBMTExM0U3MUJFMDA0QTQy
MjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NjQ0LDYg
KzE0NjQ2LDggQEAKIAkJRTQ1MzkwMzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1J
bnRlcmZhY2VJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2lkZ2V0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9T
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbU1lbW9yeUlP
Uy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NjE4MDJDMUM4REQyOTAwMDI2
QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDYxODAy
RTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZWxhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVl
dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0aG9yU3R5bGVT
aGVldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxRDY1RTFCQjBDODBE
MDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXV0aG9yU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIzNTE3LDYgKzIzNTIxLDggQEAKIAkJCQlFNDAxRTBBMzFDM0MwQjgzMDBG
MzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLywKIAkJCQlFNEQ1OEVCNjE3QjRFRDg5MDBDQkRDQTgg
LyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJRTRENThFQjcxN0I0RUQ4OTAw
Q0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCAqLywKKwkJCQlFNDYxODAyRTFDOERE
NEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovLAorCQkJCUU0NjE4MDJDMUM4REQy
OTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovLAogCQkJCUU0RDU4RUIyMTdCNERCREMw
MENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgKi8sCiAJCQkJRTRENThFQjMx
N0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8sCiAJCQkJRTQ3
QTNBQzIxQzVFQUJCRTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcCAqLywKQEAg
LTI1MTg4LDYgKzI1MTk0LDcgQEAKIAkJCQlGRDMxNUZGRjEyQjAyNjc2MDBDMUEzNTkgLyogQ2hh
bm5lbE1lcmdlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDAyMTJCMDI2NzYwMEMx
QTM1OSAvKiBDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZB
MDA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTQ2MTgwMkQxQzhERDI5MDAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDNTU5MkY3ODFBOTJBQTI4MDAxRjg4NjIgLyogQ2hhcmFjdGVyUHJvcGVydGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCOEZGRDExNkFFN0Y5NjAwMzgzODhEIC8qIENoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJBMEQw
MDZDMUQwMEVGNkYyNiAvKiBDaGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjI3Nyw3
ICsyNjI4NCw2IEBACiAJCQkJNTE0ODQ1M0YxQkI5RDA3RTAwNkE3MkVEIC8qIElEQkVycm9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4QjFCQjRDNEU4MDAxMjg5OEYgLyogSURCRXZlbnRE
aXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4RDFCQjRDNEU4MDAxMjg5OEYg
LyogSURCRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGNDFBNzIxQkE3M0I1QjAwMkUw
NTNCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
OUE2Q0JBRDFDNkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxMDMxMDUwMUJBOENDMDMwMDMzMjlDMCAvKiBJREJGYWN0b3J5SW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDOEYxQkI0QzRFODAwMTI4OThGIC8qIElEQkdl
dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTI2Miw2ICsyOTI2OCw3IEBACiAJCQkJQkM2
NEI0RDkwQ0I0Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNEE2RTlGQzMxM0MxN0QxRDAwNDZBN0Y4IC8qIENTU0ZvbnRGZWF0dXJlVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NEI0REIwQ0I0Mjk4QTAwNUYyQjYyIC8qIENT
U0ZvbnRTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDYxODAyRjFDOERENEQyMDAy
NkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZDRjEw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzAyQTY0NjBFMDlBQUU5MDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzIzRTRFMTBEQUFDRTBGMDA5RkRDOTEgLyogQ1NTR3JhZGllbnRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxl
Q29sbGVjdG9yLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOSArNzgsOCBAQCBw
dWJsaWM6CiAgICAgY29uc3QgYm9vbCBpbmNsdWRlRW1wdHlSdWxlczsKIH07CiAKLUVsZW1lbnRS
dWxlQ29sbGVjdG9yOjpFbGVtZW50UnVsZUNvbGxlY3RvcihFbGVtZW50JiBlbGVtZW50LCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzLCBjb25zdCBT
ZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCitFbGVtZW50UnVsZUNvbGxlY3Rvcjo6RWxl
bWVudFJ1bGVDb2xsZWN0b3IoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgRG9jdW1lbnRSdWxlU2V0
cyYgcnVsZVNldHMsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKICAgICA6
IG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9zdHlsZShzdHlsZSkKICAgICAsIG1fYXV0aG9y
U3R5bGUoKnJ1bGVTZXRzLmF1dGhvclN0eWxlKCkpCiAgICAgLCBtX3VzZXJTdHlsZShydWxlU2V0
cy51c2VyU3R5bGUoKSkKICAgICAsIG1fc2VsZWN0b3JGaWx0ZXIoc2VsZWN0b3JGaWx0ZXIpCkBA
IC0xMzMsNyArMTMyLDYgQEAgaW5saW5lIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmFkZEVs
ZQogdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3Qg
TWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVs
ZVJhbmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghKG1fbW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmlu
Z1N0eWxlICYmICFtX3N0eWxlKSwgIldoZW4gcmVzb2x2aW5nIHN0eWxlLCB0aGUgU2VsZWN0b3JD
aGVja2VyIG11c3QgaGF2ZSBhIHN0eWxlIHRvIHNldCB0aGUgcHNldWRvIGVsZW1lbnRzIGFuZC9v
ciB0byBkbyBtYXJraW5nLiBUaGUgU2VsZWN0b3JDb21waWxlciBhbHNvIHJlbHkgb24gdGhhdCBi
ZWhhdmlvci4iKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEobV9tb2RlID09IFNlbGVjdG9y
Q2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVu
dHMgJiYgbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgIT0gTk9QU0VVRE8pLCAiV2hlbiBp
biBTdHlsZUludmFsaWRhdGlvbiBvciBTaGFyaW5nUnVsZXMsIFNlbGVjdG9yQ2hlY2tlciBkb2Vz
IG5vdCB0cnkgdG8gbWF0Y2ggdGhlIHBzZXVkbyBJRC4gV2hpbGUgRWxlbWVudFJ1bGVDb2xsZWN0
b3Igc3VwcG9ydHMgbWF0Y2hpbmcgYSBwYXJ0aWN1bGFyIHBzZXVkb0lkIGluIHRoaXMgY2FzZSwg
dGhpcyB3b3VsZCBpbmRpY2F0ZSBhIGVycm9yIGF0IHRoZSBjYWxsIHNpdGUgc2luY2UgbWF0Y2hp
bmcgYSBwYXJ0aWN1bGFyIGVsZW1lbnQgc2hvdWxkIGJlIHVubmVjZXNzYXJ5LiIpOwogCiAjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQpAQCAtMTk0LDEwICsxOTIsNyBAQCB2b2lkIEVsZW1lbnRSdWxl
Q29sbGVjdG9yOjpzb3J0QW5kVHJhbnNmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qg
b2YgZGVjbGFyYXRpb25zLgogICAgIGZvciAoY29uc3QgTWF0Y2hlZFJ1bGUmIG1hdGNoZWRSdWxl
IDogbV9tYXRjaGVkUnVsZXMpIHsKLSAgICAgICAgaWYgKG1fc3R5bGUgJiYgbWF0Y2hlZFJ1bGUu
cnVsZURhdGEtPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CiAgICAgICAgIG1fcmVzdWx0LmFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbWF0Y2hl
ZFJ1bGUucnVsZURhdGEtPnJ1bGUoKSwgbWF0Y2hlZFJ1bGUucnVsZURhdGEtPmxpbmtNYXRjaFR5
cGUoKSwgbWF0Y2hlZFJ1bGUucnVsZURhdGEtPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKICAg
ICB9CiB9CkBAIC00MTQsNyArNDA5LDEyIEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVj
dG9yOjpydWxlTWEKICNpZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORwogICAgICAgICBydWxl
RGF0YS5jb21waWxlZFNlbGVjdG9yVXNlZCgpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBzZWxl
Y3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJnNwZWNpZmljaXR5KTsKKyAgICAgICAgYm9vbCBzZWxl
Y3Rvck1hdGNoZXMgPSBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJnNwZWNpZmljaXR5KTsK
KworICAgICAgICBpZiAoc2VsZWN0b3JNYXRjaGVzICYmIHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21t
b25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgbV9kaWRNYXRjaFVuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IgPSB0cnVlOworCisgICAgICAgIHJldHVybiBzZWxlY3Rvck1hdGNoZXM7
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogCkBAIC00NTAsODYg
KzQ1MCwxNiBAQCBpbmxpbmUgYm9vbCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hCiAgICAg
ICAgIHNlbGVjdG9yTWF0Y2hlcyA9IHNlbGVjdG9yQ2hlY2tlci5tYXRjaCgqc2VsZWN0b3IsIG1f
ZWxlbWVudCwgY29udGV4dCwgc3BlY2lmaWNpdHkpOwogICAgIH0KIAotICAgIGNvbW1pdFN0eWxl
UmVsYXRpb25zKGNvbnRleHQuc3R5bGVSZWxhdGlvbnMpOwotCi0gICAgaWYgKGNvbnRleHQucHNl
dWRvSURTZXQpCi0gICAgICAgIG1fc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhjb250ZXh0LnBz
ZXVkb0lEU2V0KTsKKyAgICBpZiAocnVsZURhdGEuY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yKCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hlcyB8fCBjb250ZXh0LnBzZXVk
b0lEU2V0KQorICAgICAgICAgICAgbV9kaWRNYXRjaFVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ig
PSB0cnVlOworICAgIH0KKyAgICBtX21hdGNoZWRQc2V1ZG9FbGVtZW50SWRzLm1lcmdlKGNvbnRl
eHQucHNldWRvSURTZXQpOworICAgIG1fc3R5bGVSZWxhdGlvbnMuYXBwZW5kVmVjdG9yKGNvbnRl
eHQuc3R5bGVSZWxhdGlvbnMpOwogCiAgICAgcmV0dXJuIHNlbGVjdG9yTWF0Y2hlczsKIH0KIAot
Ly8gRklYTUU6IFJ1bGUgY29sbGVjdG9yIHNob3VsZCBub3QgYmUgZG9pbmcgbXV0YXRpb25zLiBN
b3ZlIHRoaXMgc29tZXdoZXJlIGVsc2UuCi12b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjb21t
aXRTdHlsZVJlbGF0aW9ucyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb25zJiBz
dHlsZVJlbGF0aW9ucykKLXsKLSAgICBmb3IgKGF1dG8mIHJlbGF0aW9uIDogc3R5bGVSZWxhdGlv
bnMpIHsKLSAgICAgICAgc3dpdGNoIChyZWxhdGlvbi50eXBlKSB7Ci0gICAgICAgIGNhc2UgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5QWN0aXZlOgotICAgICAgICAg
ICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QWN0aXZlKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OkFmZmVjdGVkQnlEcmFnOgotICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVt
ZW50ID09ICZtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0ZWRC
eURyYWcoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWxhdGlvbi5lbGVt
ZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUVtcHR5
OgotICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRTdHlsZUFmZmVjdGVkQnlFbXB0eSgp
OwotICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0RW1wdHlTdGF0ZShyZWxhdGlvbi52YWx1ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRp
b246OkFmZmVjdGVkQnlIb3ZlcjoKLSAgICAgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9
PSAmbV9lbGVtZW50KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEFmZmVjdGVkQnlIb3Zl
cigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQu
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3Vz
U2libGluZzoKLSAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0U3R5bGVJc0FmZmVjdGVk
QnlQcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nOgotICAgICAg
ICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXM6Ci0g
ICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJk
UG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRS
dWxlczoKLSAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFz
ZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoKLSAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQu
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAg
ICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJh
Y2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RD
aGlsZFJ1bGVzOgotICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
U2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpGaXJzdENoaWxkOgotICAgICAgICAgICAg
aWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhdXRvKiBz
dHlsZSA9IHJlbGF0aW9uLmVsZW1lbnQucmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246Okxhc3RDaGlsZDoKLSAgICAgICAg
ICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9PSAmbV9lbGVtZW50KQotICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhdXRv
KiBzdHlsZSA9IHJlbGF0aW9uLmVsZW1lbnQucmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleDoKLSAg
ICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRJbmRleChyZWxhdGlvbi52YWx1ZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OlVuaXF1ZToKLSAgICAgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9PSAm
bV9lbGVtZW50KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoYXV0byogc3R5bGUgPSByZWxhdGlvbi5lbGVtZW50LnJlbmRlclN0eWxl
KCkpCi0gICAgICAgICAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBSdWxlU2V0OjpSdWxlRGF0YVZlY3Rvciog
cnVsZXMsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBTdHlsZVJlc29sdmVyOjpS
dWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKICAgICBpZiAoIXJ1bGVzKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBAIHN0cnVjdCBNYXRjaGVkUnVsZSB7CiAKIGNsYXNzIEVsZW1lbnRSdWxl
Q29sbGVjdG9yIHsKIHB1YmxpYzoKLSAgICBFbGVtZW50UnVsZUNvbGxlY3RvcihFbGVtZW50Jiwg
UmVuZGVyU3R5bGUqLCBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiwgY29uc3QgU2VsZWN0b3JGaWx0
ZXIqKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvcihFbGVtZW50JiwgY29uc3QgRG9jdW1lbnRS
dWxlU2V0cyYsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKik7CiAgICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3IoRWxlbWVudCYsIGNvbnN0IFJ1bGVTZXQmIGF1dGhvclN0eWxlLCBjb25zdCBTZWxlY3RvckZp
bHRlciopOwogCiAgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzLCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CkBAIC02Nyw2ICs2NywxMCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNNYXRjaGVkUnVsZXMoKSBjb25zdCB7IHJldHVybiAhbV9tYXRj
aGVkUnVsZXMuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhck1hdGNoZWRSdWxlcygpOwogCisg
ICAgY29uc3QgUHNldWRvSWRTZXQmIG1hdGNoZWRQc2V1ZG9FbGVtZW50SWRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRjaGVkUHNldWRvRWxlbWVudElkczsgfQorICAgIGNvbnN0IFN0eWxlOjpSZWxh
dGlvbnMmIHN0eWxlUmVsYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVJlbGF0aW9uczsg
fQorICAgIGJvb2wgZGlkTWF0Y2hVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaWRNYXRjaFVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVz
KiwgYm9vbCBpc0NhY2hlYWJsZSA9IHRydWUpOwogCkBAIC04NywxMCArOTEsNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBNYXRjaGVkUnVsZSYpOwogCi0gICAg
dm9pZCBjb21taXRTdHlsZVJlbGF0aW9ucyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVs
YXRpb25zJik7Ci0KICAgICBFbGVtZW50JiBtX2VsZW1lbnQ7Ci0gICAgUmVuZGVyU3R5bGUqIG1f
c3R5bGUgeyBudWxscHRyIH07CiAgICAgY29uc3QgUnVsZVNldCYgbV9hdXRob3JTdHlsZTsKICAg
ICBjb25zdCBSdWxlU2V0KiBtX3VzZXJTdHlsZSB7IG51bGxwdHIgfTsKICAgICBjb25zdCBTZWxl
Y3RvckZpbHRlciogbV9zZWxlY3RvckZpbHRlciB7IG51bGxwdHIgfTsKQEAgLTEwOCw3ICsxMDks
MTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIE91dHB1dC4KICAgICBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZT4+IG1fbWF0Y2hlZFJ1bGVMaXN0OworICAgIGJvb2wgbV9kaWRNYXRjaFVuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IgeyBmYWxzZSB9OwogICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0
IG1fcmVzdWx0OworICAgIFN0eWxlOjpSZWxhdGlvbnMgbV9zdHlsZVJlbGF0aW9uczsKKyAgICBQ
c2V1ZG9JZFNldCBtX21hdGNoZWRQc2V1ZG9FbGVtZW50SWRzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3Bw
CShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNo
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYVF1ZXJ5RXZhbHVhdG9yPiBNZWQKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJvb3RTdHlsZSA9
IG1fZG9jdW1lbnQtPmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKmRvY3Vt
ZW50RWxlbWVudCwgbV9kb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50
UnVsZXMpOworICAgIGF1dG8gcm9vdFN0eWxlID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNv
bHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LT5yZW5k
ZXJTdHlsZSgpLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykucmVuZGVyU3R5bGU7CiAKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPihtZWRpYVR5cGUoKSwg
bV9kb2N1bWVudC0+ZnJhbWUoKSwgcm9vdFN0eWxlLmdldCgpKTsKKyAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPihtZWRpYVR5cGUoKSwgbV9kb2N1bWVudC0+
ZnJhbWUoKSwgcm9vdFN0eWxlLnB0cigpKTsKIH0KIAogYm9vbCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6
ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCogbWVkaWEpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEyICs4NCwx
MiBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVja2VyOjpMb2NhbENvbnRleHQgewogCiB9OwogCi1zdGF0
aWMgaW5saW5lIHZvaWQgYWRkU3R5bGVSZWxhdGlvbihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUgdHlwZSwgdW5zaWduZWQgdmFsdWUgPSAxKQor
c3RhdGljIGlubGluZSB2b2lkIGFkZFN0eWxlUmVsYXRpb24oU2VsZWN0b3JDaGVja2VyOjpDaGVj
a2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgU3R5
bGU6OlJlbGF0aW9uOjpUeXBlIHR5cGUsIHVuc2lnbmVkIHZhbHVlID0gMSkKIHsKLSAgICBBU1NF
UlQodmFsdWUgPT0gMSB8fCB0eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
TnRoQ2hpbGRJbmRleCB8fCB0eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0ZWRCeUVtcHR5KTsKKyAgICBBU1NFUlQodmFsdWUgPT0gMSB8fCB0eXBlID09IFN0eWxl
OjpSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleCB8fCB0eXBlID09IFN0eWxlOjpSZWxhdGlvbjo6QWZm
ZWN0ZWRCeUVtcHR5KTsKICAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnJlc29sdmluZ01vZGUgIT0g
U2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGNoZWNraW5nQ29udGV4dC5zdHlsZVJlbGF0aW9ucy5hcHBlbmQoeyBjb25zdF9jYXN0PEVs
ZW1lbnQmPihlbGVtZW50KSwgdHlwZSwgdmFsdWUgfSk7CisgICAgY2hlY2tpbmdDb250ZXh0LnN0
eWxlUmVsYXRpb25zLmFwcGVuZCh7IGVsZW1lbnQsIHR5cGUsIHZhbHVlIH0pOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgaXNGaXJzdENoaWxkRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50
KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RDaGlsZEVsZW1l
bnQoY28KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZpcnN0T2ZUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCiB7CiAgICAgZm9yIChjb25zdCBFbGVtZW50KiBz
aWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJs
aW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5n
KSkgewotICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcs
IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKKyAg
ICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpzaWJsaW5nLCBTdHlsZTo6
UmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAKICAgICAgICAgaWYgKHNpYmxpbmctPmhh
c1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c0JlZm9yZShTZQogICAgIGludCBj
b3VudCA9IDA7CiAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZl
cnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVu
dFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewogCi0gICAgICAgIGFkZFN0
eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqc2libGluZywgU2VsZWN0b3JDaGVja2VyOjpT
dHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOworICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0c05l
eHRTaWJsaW5nKTsKIAogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHNpYmxpbmctPmNoaWxkSW5k
ZXgoKTsKICAgICAgICAgaWYgKGluZGV4KSB7CkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGljIGlu
bGluZSBpbnQgY291bnRFbGVtZW50c09mVHlwZUJlZgogewogICAgIGludCBjb3VudCA9IDA7CiAg
ICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewotICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNo
ZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0c05leHRTaWJsaW5nKTsKKyAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0Nv
bnRleHQsICpzaWJsaW5nLCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAK
ICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICArK2Nv
dW50OwpAQCAtMzI4LDEzICszMjgsMTMgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBT
ZWxlY3RvckNoZQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29u
dGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsK
KyAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29udGV4dC5l
bGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCiAg
ICAgICAgICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50
KQogICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVj
dG9yRmFpbHNBbGxTaWJsaW5ncyk7CiAKLSAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hl
Y2tpbmdDb250ZXh0LCAqcHJldmlvdXNFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4
dFNpYmxpbmcpOworICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQs
ICpwcmV2aW91c0VsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsK
IAogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAg
ICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENv
bnRleHQuc2VsZWN0b3I7CkBAIC0zNDksMTIgKzM0OSwxMiBAQCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVw
ZGF0ZVdpdGhNYXRjaFR5cGUocmVzdWx0LCBtYXRjaFR5cGUpOwogICAgICAgICB9CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgYWRkU3R5bGVSZWxhdGlv
bihjaGVja2luZ0NvbnRleHQsICpjb250ZXh0LmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcpOworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5n
Q29udGV4dCwgKmNvbnRleHQuZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJl
dmlvdXNTaWJsaW5nKTsKIAogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5l
bGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7CiAgICAgICAg
IGZvciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENv
bnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKm5leHRDb250ZXh0LmVsZW1lbnQsIFN0
eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CisgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKm5leHRDb250ZXh0LmVsZW1lbnQsIFN0eWxlOjpSZWxh
dGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdu
b3JlRHluYW1pY1BzZXVkbzsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGlyZWN0QWRqYWNlbnRT
cGVjaWZpY2l0eSA9IDA7CkBAIC02ODIsNyArNjgyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKENoZWNraW5nQwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFkZFN0eWxl
UmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29udGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9u
OjpBZmZlY3RlZEJ5RW1wdHksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxh
dGlvbihjaGVja2luZ0NvbnRleHQsICpjb250ZXh0LmVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6
QWZmZWN0ZWRCeUVtcHR5LCByZXN1bHQpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgIH0KQEAgLTY5MSwxNSArNjkxLDE1IEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZShDaGVja2luZ0MKICAgICAgICAgICAgIGlmIChjb25zdCBFbGVtZW50KiBw
YXJlbnRFbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAg
ICBib29sIGlzRmlyc3RDaGlsZCA9IGlzRmlyc3RDaGlsZEVsZW1lbnQoZWxlbWVudCk7CiAgICAg
ICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgYWRkU3R5
bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkZpcnN0
Q2hpbGQpOwotICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0
LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RD
aGlsZFJ1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2lu
Z0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgICAg
ICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50
LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RDaGlsZDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZpcnN0
T2ZUeXBlOgogICAgICAgICAgICAgLy8gZmlyc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBl
bGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
ZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0
eWxlOjpSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBlbGVtZW50
LnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC03MDgs
MTUgKzcwOCwxNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAg
ICAgICAgICAgICBpZiAoY29uc3QgRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBpc0xhc3RDaGlsZCA9IHBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1l
bnQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzTGFzdENoaWxkKQotICAgICAgICAg
ICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5
bGVSZWxhdGlvbjo6TGFzdENoaWxkKTsKLSAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9u
KGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVu
QWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6TGFzdENo
aWxkKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KnBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENo
aWxkUnVsZXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBpc0xhc3RDaGlsZDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc0xhc3RPZlR5cGU6CiAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0
aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFy
ZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAg
YWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJl
bGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVt
ZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQ
YXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIHJldHVybiBpc0xhc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC50YWdRTmFt
ZSgpKTsKQEAgLTcyNiwyMCArNzI2LDIwIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShDaGVja2luZ0MKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxl
bWVudC5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQg
PSBpc0ZpcnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJvb2wgb25s
eUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0No
aWxkcmVuKCkgJiYgaXNMYXN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgICAg
IGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKLSAgICAgICAgICAg
ICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0
eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKTsKKyAgICAgICAg
ICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQs
IFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKKyAg
ICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVs
ZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMp
OwogICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKQotICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6
Rmlyc3RDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tp
bmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkZpcnN0Q2hpbGQpOwogICAgICAg
ICAgICAgICAgIGlmIChvbmx5Q2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVs
YXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpMYXN0Q2hpbGQp
OworICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
ZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpMYXN0Q2hpbGQpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBvbmx5Q2hpbGQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPbmx5T2ZUeXBlOgogICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2VsZWN0b3IgaXMgdmVyeSBzbG93LgogICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQoKSkgewotICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHls
ZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVs
YXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKKyAgICAg
ICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5
bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgICAgICAg
ICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxl
OjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwog
ICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGls
ZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBlbGVtZW50
LnRhZ1FOYW1lKCkpICYmIGlzTGFzdE9mVHlwZShlbGVtZW50LCBlbGVtZW50LnRhZ1FOYW1lKCkp
OwpAQCAtNzc4LDcgKzc3OCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShDaGVj
a2luZ0MKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NQbGFjZWhvbGRlclNob3duOgogICAgICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PihlbGVtZW50KSkgewotICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24o
Y2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpVbmlxdWUpOworICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHls
ZTo6UmVsYXRpb246OlVuaXF1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzkzLDEyICs3
OTMsMTIgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKENoZWNraW5nQwogICAgICAg
ICAgICAgICAgICAgICBzcGVjaWZpY2l0eSA9IENTU1NlbGVjdG9yOjphZGRTcGVjaWZpY2l0aWVz
KHNwZWNpZmljaXR5LCBzZWxlY3Rvckxpc3RTcGVjaWZpY2l0eSk7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVs
ZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOworICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHls
ZTo6UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCiAgICAgICAgICAgICAg
ICAgaW50IGNvdW50ID0gMTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JM
aXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci5zZWxlY3Rvckxpc3QoKSkgewogICAgICAgICAg
ICAgICAgICAgICBmb3IgKEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlUmVsYXRpb246
OkFmZmVjdHNOZXh0U2libGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0
c05leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWdub3Jl
ZFNwZWNpZmljaXR5OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoU2VsZWN0b3JM
aXN0KGNoZWNraW5nQ29udGV4dCwgY29udGV4dCwgKnNpYmxpbmcsICpzZWxlY3Rvckxpc3QsIGln
bm9yZWRTcGVjaWZpY2l0eSkpCkBAIC04MDYsNyArODA2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKENoZWNraW5nQwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gY291bnRFbGVtZW50
c0JlZm9yZShjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6
TnRoQ2hpbGRJbmRleCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpOdGhDaGlsZElu
ZGV4LCBjb3VudCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHNl
bGVjdG9yLm1hdGNoTnRoKGNvdW50KSkKQEAgLTgxOCw3ICs4MTgsNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAg
IGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZVJlbGF0aW9u
OjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3Rl
ZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDEgKyBj
b3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgZWxlbWVu
dC50YWdRTmFtZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3IubWF0Y2hOdGgoY291
bnQpKQpAQCAtODM1LDkgKzgzNSw5IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShD
aGVja2luZ0MKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICAgICAgc3BlY2lmaWNpdHkgPSBDU1NTZWxlY3Rvcjo6YWRkU3BlY2lmaWNpdGllcyhz
cGVjaWZpY2l0eSwgc2VsZWN0b3JMaXN0U3BlY2lmaWNpdHkpOwogCi0gICAgICAgICAgICAgICAg
ICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2lu
Z0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0
ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdD
b250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOworICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6
Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg2MCw3ICs4NjAsNyBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAgICAgICAgICAgICBpZiAoIXNl
bGVjdG9yLnBhcnNlTnRoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBp
ZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRF
bGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9u
YWxSdWxlcyk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRl
eHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJh
Y2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC05MDIsNyArOTAyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKENoZWNraW5nQwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIHJldHVybiBlbGVtZW50LmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9
PSBWaXNpdGVkTWF0Y2hUeXBlOjpFbmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0RyYWc6Ci0gICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29u
dGV4dCwgZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeURyYWcpOworICAgICAgICAg
ICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlOjpSZWxh
dGlvbjo6QWZmZWN0ZWRCeURyYWcpOwogCiAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZW5kZXJl
cigpICYmIGVsZW1lbnQucmVuZGVyZXIoKS0+aXNEcmFnZ2luZygpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtOTExLDcgKzkxMSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShDaGVja2luZ0MKICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzRm9jdXNQc2V1ZG9D
bGFzcyhlbGVtZW50KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3Zl
cjoKICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgZWxlbWVudC5pc0xpbmsoKSB8
fCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAg
ICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6QWZmZWN0ZWRCeUhvdmVyKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5
SG92ZXIpOwogCiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaG92ZXJlZCgpIHx8IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdF9jYXN0PEVsZW1lbnQm
PihlbGVtZW50KSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXIpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkxOSw3ICs5MTksNyBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6CiAgICAgICAgICAgICBpZiAobV9zdHJp
Y3RQYXJzaW5nIHx8IGVsZW1lbnQuaXNMaW5rKCkgfHwgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5R
dWlya3NNb2RlKGNvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmUp
OworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVt
ZW50LCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmUpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKGVsZW1lbnQuYWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3Jj
ZVBzZXVkb1N0YXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCY+KGVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NBY3RpdmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgJKHJldmlzaW9uIDE5NzYzNikKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIKKyNpbmNsdWRlICJTdHlsZVJlbGF0
aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC03NiwyOSArNzcsNiBAQCBwdWJsaWM6CiAKICAgICBTZWxlY3RvckNoZWNrZXIoRG9j
dW1lbnQmKTsKIAotICAgIHN0cnVjdCBTdHlsZVJlbGF0aW9uIHsKLSAgICAgICAgZW51bSBUeXBl
IHsKLSAgICAgICAgICAgIEFmZmVjdGVkQnlBY3RpdmUsCi0gICAgICAgICAgICBBZmZlY3RlZEJ5
RHJhZywKLSAgICAgICAgICAgIEFmZmVjdGVkQnlFbXB0eSwKLSAgICAgICAgICAgIEFmZmVjdGVk
QnlIb3ZlciwKLSAgICAgICAgICAgIEFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcsCi0gICAgICAg
ICAgICBBZmZlY3RzTmV4dFNpYmxpbmcsCi0gICAgICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcywKLSAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeUZp
cnN0Q2hpbGRSdWxlcywKLSAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFz
ZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcywKLSAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRC
eUxhc3RDaGlsZFJ1bGVzLAotICAgICAgICAgICAgRmlyc3RDaGlsZCwKLSAgICAgICAgICAgIExh
c3RDaGlsZCwKLSAgICAgICAgICAgIE50aENoaWxkSW5kZXgsCi0gICAgICAgICAgICBVbmlxdWUs
Ci0gICAgICAgIH07Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQ7Ci0gICAgICAgIFR5cGUgdHlw
ZTsKLSAgICAgICAgdW5zaWduZWQgdmFsdWU7Ci0gICAgfTsKLSAgICB1c2luZyBTdHlsZVJlbGF0
aW9ucyA9IFZlY3RvcjxTdHlsZVJlbGF0aW9uLCA4PjsKLQogICAgIHN0cnVjdCBDaGVja2luZ0Nv
bnRleHQgewogICAgICAgICBDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlIHJl
c29sdmluZ01vZGUpCiAgICAgICAgICAgICA6IHJlc29sdmluZ01vZGUocmVzb2x2aW5nTW9kZSkK
QEAgLTExMSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUgeyBudWxscHRyIH07CiAKICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2Vy
IHRvIGhhdmUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIHJldHVybiB2YWx1ZXMuIFRoaXMgcmVxdWly
ZXMgc29tZSBtb3JlIHdvcmsgaW4gdGhlIHNlbGVjdG9yIGNvbXBpbGVyLgotICAgICAgICBTdHls
ZVJlbGF0aW9ucyBzdHlsZVJlbGF0aW9uczsKKyAgICAgICAgU3R5bGU6OlJlbGF0aW9ucyBzdHls
ZVJlbGF0aW9uczsKICAgICAgICAgUHNldWRvSWRTZXQgcHNldWRvSURTZXQ7CiAgICAgfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMyAr
NjEsMTMgQEAgYm9vbCBTdHlsZU1lZGlhOjptYXRjaE1lZGl1bShjb25zdCBTdHJpbgogICAgIGlm
ICghZG9jdW1lbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IHJvb3RTdHlsZSA9IGRvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29sdmVyKCku
c3R5bGVGb3JFbGVtZW50KCpkb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LT5yZW5kZXJTdHlsZSgp
LCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyk7CisgICAgYXV0byByb290U3R5bGUgPSBkb2N1bWVu
dC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50
LCBkb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRl
clN0eWxlOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNl
dDo6Y3JlYXRlKCk7CiAgICAgaWYgKCFtZWRpYS0+cGFyc2UocXVlcnkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwodHlwZSgpLCBt
X2ZyYW1lLCByb290U3R5bGUuZ2V0KCkpOworICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Igc2NyZWVu
RXZhbCh0eXBlKCksIG1fZnJhbWUsIHJvb3RTdHlsZS5wdHIoKSk7CiAgICAgcmV0dXJuIHNjcmVl
bkV2YWwuZXZhbChtZWRpYS5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDcgKzI2Nyw3IEBAIFN0eWxlUmVz
b2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGQKICAgICAgICAgbV9tZWRpdW0gPSBzdGQ6
Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnlFdmFsdWF0b3I+KCJhbGwiKTsKIAogICAgIGlmIChyb290
KQotICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKnJvb3QsIG1f
ZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOworICAgICAg
ICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKnJvb3QsIG1fZG9jdW1lbnQu
cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRlclN0eWxlOwogCiAg
ICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9IHN0
ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeUV2YWx1YXRvcj4odmlldy0+bWVkaWFUeXBlKCksICZ2
aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpOwpAQCAtMzcxLDcgKzM3MSw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4g
cGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotUmVmPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0Jl
aGF2aW9yLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVj
dG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKK0VsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
LCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0JlaGF2aW9yLCBjb25zdCBSZW5kZXJSZWdp
b24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRl
cikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbkxvYWRQZW5kaW5nSW1hZ2VzKTsKIApAQCAt
Mzg2LDIwICszODYsMjIgQEAgUmVmPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZv
cgogICAgICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUu
c3R5bGUoKSkpOwogICAgIH0KIAorICAgIGF1dG8mIHN0eWxlID0gKnN0YXRlLnN0eWxlKCk7CisK
ICAgICBpZiAoZWxlbWVudC5pc0xpbmsoKSkgewotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJ
c0xpbmsodHJ1ZSk7CisgICAgICAgIHN0eWxlLnNldElzTGluayh0cnVlKTsKICAgICAgICAgRUlu
c2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpOwogICAgICAgICBp
ZiAobGlua1N0YXRlICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgICAgIGJvb2wgZm9yY2VW
aXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1l
bnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQpOwogICAgICAgICAgICAgaWYgKGZv
cmNlVmlzaXRlZCkKICAgICAgICAgICAgICAgICBsaW5rU3RhdGUgPSBJbnNpZGVWaXNpdGVkTGlu
azsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbnNpZGVMaW5rKGxpbmtT
dGF0ZSk7CisgICAgICAgIHN0eWxlLnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAK
ICAgICBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVs
ZW1lbnQoZWxlbWVudCk7CiAKLSAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxl
bWVudCwgc3RhdGUuc3R5bGUoKSwgbV9ydWxlU2V0cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigp
KTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0
cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKICAgICBjb2xsZWN0b3Iuc2V0UmVnaW9uRm9y
U3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsKICAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKG1fbWVk
aXVtLmdldCgpKTsKIApAQCAtNDA4LDYgKzQxMCwxNSBAQCBSZWY8UmVuZGVyU3R5bGU+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlRm9yCiAgICAgZWxzZQogICAgICAgICBjb2xsZWN0b3IubWF0Y2hBbGxS
dWxlcyhtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcywgbWF0Y2hpbmdCZWhhdmlvciAhPSBNYXRj
aEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CiAKKyAgICBpZiAoY29sbGVjdG9yLm1hdGNoZWRQc2V1
ZG9FbGVtZW50SWRzKCkpCisgICAgICAgIHN0eWxlLnNldEhhc1BzZXVkb1N0eWxlcyhjb2xsZWN0
b3IubWF0Y2hlZFBzZXVkb0VsZW1lbnRJZHMoKSk7CisKKyAgICAvLyBUaGlzIGlzIHJlcXVpcmVk
IGZvciBzdHlsZSBzaGFyaW5nLgorICAgIGlmIChjb2xsZWN0b3IuZGlkTWF0Y2hVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgIHN0eWxlLnNldFVuaXF1ZSgpOworCisgICAgYXV0
byBlbGVtZW50U3R5bGVSZWxhdGlvbnMgPSBTdHlsZTo6Y29tbWl0UmVsYXRpb25zVG9SZW5kZXJT
dHlsZShzdHlsZSwgZWxlbWVudCwgY29sbGVjdG9yLnN0eWxlUmVsYXRpb25zKCkpOworCiAgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLCBlbGVtZW50
KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0
IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgpAQCAtNDE4LDggKzQyOSw3IEBAIFJl
ZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3IKIAogICAgIHN0YXRlLmNsZWFy
KCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KIAotICAgIC8vIE5vdyByZXR1
cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKKyAgICByZXR1cm4g
eyBzdGF0ZS50YWtlU3R5bGUoKSwgV1RGTW92ZShlbGVtZW50U3R5bGVSZWxhdGlvbnMpIH07CiB9
CiAKIFJlZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFt
ZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKQEAgLTU1OCw3ICs1NjgsNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwCiAgICAgLy8gdGhvc2UgcnVsZXMu
CiAKICAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1bGVzLgotICAgIEVsZW1lbnRS
dWxlQ29sbGVjdG9yIGNvbGxlY3RvcihlbGVtZW50LCBtX3N0YXRlLnN0eWxlKCksIG1fcnVsZVNl
dHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CisgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3Ig
Y29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7
CiAgICAgY29sbGVjdG9yLnNldFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG9TdHlsZVJlcXVlc3Qp
OwogICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0obV9tZWRpdW0uZ2V0KCkpOwogICAgIGNvbGxlY3Rv
ci5tYXRjaFVBUnVsZXMoKTsKQEAgLTU2OCw2ICs1NzgsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpwCiAgICAgICAgIGNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1bGVz
KGZhbHNlKTsKICAgICB9CiAKKyAgICBBU1NFUlQoIWNvbGxlY3Rvci5tYXRjaGVkUHNldWRvRWxl
bWVudElkcygpKTsKKwogICAgIGlmIChjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLm1hdGNoZWRQ
cm9wZXJ0aWVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA0
MCw3ICsxMDUyLDcgQEAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOgog
CiAgICAgbV9zdGF0ZSA9IFN0YXRlKCplbGVtZW50LCBudWxscHRyKTsKIAotICAgIEVsZW1lbnRS
dWxlQ29sbGVjdG9yIGNvbGxlY3RvcigqZWxlbWVudCwgbnVsbHB0ciwgbV9ydWxlU2V0cywgbV9z
dGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0
b3IoKmVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CiAgICAg
Y29sbGVjdG9yLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMp
OwogICAgIGNvbGxlY3Rvci5zZXRQc2V1ZG9TdHlsZVJlcXVlc3QoUHNldWRvU3R5bGVSZXF1ZXN0
KHBzZXVkb0lkKSk7CiAgICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hl
Y2tlci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgorI2luY2x1ZGUgIlN0eWxl
UmVsYXRpb25zLmgiCiAjaW5jbHVkZSAiVmlld3BvcnRTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSA8Yml0c2V0PgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTEyMyw2ICsxMjQsMTYgQEAgcHVibGlj
OgogICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFyOwogfTsKIAorc3RydWN0IEVsZW1lbnRT
dHlsZSB7CisgICAgRWxlbWVudFN0eWxlKFJlZjxSZW5kZXJTdHlsZT4mJiByZW5kZXJTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpSZWxhdGlvbnM+IHJlbGF0aW9ucyA9IHsgfSkKKyAgICAg
ICAgOiByZW5kZXJTdHlsZShXVEZNb3ZlKHJlbmRlclN0eWxlKSkKKyAgICAgICAgLCByZWxhdGlv
bnMoV1RGTW92ZShyZWxhdGlvbnMpKQorICAgIHsgfQorCisgICAgUmVmPFJlbmRlclN0eWxlPiBy
ZW5kZXJTdHlsZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6OlJlbGF0aW9ucz4gcmVsYXRp
b25zOworfTsKKwogLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2
ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCiBjbGFzcyBT
dHlsZVJlc29sdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZVJlc29sdmVyKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0xMzAsNyArMTQxLDcgQEAgcHVibGljOgogICAg
IFN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmKTsKICAgICB+U3R5bGVSZXNvbHZlcigpOwogCi0gICAg
UmVmPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBjb25zdCBS
ZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3RvckZp
bHRlciogPSBudWxscHRyKTsKKyAgICBFbGVtZW50U3R5bGUgc3R5bGVGb3JFbGVtZW50KEVsZW1l
bnQmLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0
Y2hBbGxSdWxlcywgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0
ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGtleWZyYW1l
U3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1l
TGlzdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIgog
I2luY2x1ZGUgIlN0YWNrQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3R5bGVSZWxhdGlvbnMuaCIK
ICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvR1BS
SW5mby5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0xpbmtCdWZmZXIuaD4KQEAgLTMyMyw4
ICszMjQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNUYXJnZXQoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKIAogICAgIC8vIEhlbHBlcnMuCi0gICAg
dm9pZCBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKEFzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUs
IE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUgPSB7IH0pOwotICAgIHZvaWQg
Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0Nv
bnRleHQsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0
eWxlUmVsYXRpb246OlR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUg
PSB7IH0pOworICAgIHZvaWQgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHls
ZShBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpUeXBlLCBP
cHRpb25hbDxBc3NlbWJsZXI6OlJlZ2lzdGVySUQ+IHZhbHVlID0geyB9KTsKKyAgICB2b2lkIGdl
bmVyYXRlQWRkU3R5bGVSZWxhdGlvbihBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250
ZXh0LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpUeXBl
LCBPcHRpb25hbDxBc3NlbWJsZXI6OlJlZ2lzdGVySUQ+IHZhbHVlID0geyB9KTsKICAgICBBc3Nl
bWJsZXI6Okp1bXAgYnJhbmNoT25SZXNvbHZpbmdNb2RlV2l0aENoZWNraW5nQ29udGV4dChBc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSwgQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7CiAgICAgQXNzZW1ibGVyOjpKdW1wIGJy
YW5jaE9uUmVzb2x2aW5nTW9kZShBc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNlbGVj
dG9yQ2hlY2tlcjo6TW9kZSwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7
CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0TGluayhBc3NlbWJsZXI6Okp1bXBMaXN0
JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50KTsKQEAgLTE4OTEs
NyArMTg5Miw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGUKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChzaG91bGRNYXJrU3R5bGVJ
c0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoZnJhZ21lbnQpKQotICAgICAgICAgICAgZ2VuZXJh
dGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVy
LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxp
bmcpOworICAgICAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHls
ZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2
aW91c1NpYmxpbmcpOwogICAgICAgICBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQo
ZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CiAgICAgfQogCkBAIC0yMTM1LDcgKzIxMzYsNyBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVXYWxrCiB2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVEaXJlY3RBZGphY2VudFRyZWVXYWxrZXIoQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkK
IHsKICAgICBnZW5lcmF0ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnQoZmFpbHVyZUNhc2VzLCBmcmFn
bWVudCk7Ci0gICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVt
ZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVj
dHNOZXh0U2libGluZyk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdT
dHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdHNOZXh0
U2libGluZyk7CiAKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nVGFnTmFtZUZhaWx1
cmVDYXNlczsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nUG9zdFRhZ05hbWVGYWls
dXJlQ2FzZXM7CkBAIC0yMTYwLDcgKzIxNjEsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVJbmRpCiAgICAgICAgIG1fYmFja3RyYWNraW5nTGV2ZWxzLmxhc3QoKS5pbmRp
cmVjdEFkamFjZW50VHJlZVdhbGtlckJhY2t0cmFja2luZ1BvaW50ID0gbV9hc3NlbWJsZXIubGFi
ZWwoKTsKIAogICAgIGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudChmYWlsdXJlQ2FzZXMs
IGZyYWdtZW50KTsKLSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxl
KGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0c05leHRTaWJsaW5nKTsKKyAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29s
dmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0
c05leHRTaWJsaW5nKTsKIAogICAgIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJh
Y2t0cmFja2luZ0ZsYWc6OkluZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50KQogICAgICAgICBtX2Jh
Y2t0cmFja2luZ0xldmVscy5sYXN0KCkuaW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQgPSBtX2Fz
c2VtYmxlci5sYWJlbCgpOwpAQCAtMjE3MCw3ICsyMTcxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlSW5kaQogICAgIGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtUbyhsb29w
U3RhcnQsICZtX2Fzc2VtYmxlcik7CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUgcmVsYXRp
b25UeXBlLCBPcHRpb25hbDxBc3NlbWJsZXI6OlJlZ2lzdGVySUQ+IHZhbHVlKQordm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5
bGUoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6VHlwZSBy
ZWxhdGlvblR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUpCiB7CiAg
ICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rv
cikKICAgICAgICAgcmV0dXJuOwpAQCAtMjE4NSwxMCArMjE4NiwxMCBAQCB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVBZGRTCiAKIHN0YXRpYyB2b2lkIGFkZFN0eWxlUmVsYXRp
b25GdW5jdGlvbihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250
ZXh0LCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGNoZWNraW5nQ29udGV4dC0+c3R5bGVSZWxh
dGlvbnMuYXBwZW5kKHsgKmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0ZWRCeUFjdGl2ZSwgMSB9KTsKKyAgICBjaGVja2luZ0NvbnRleHQtPnN0eWxlUmVsYXRp
b25zLmFwcGVuZCh7ICplbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmUs
IDEgfSk7CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFkZFN0eWxl
UmVsYXRpb24oQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCwgQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VHlw
ZSByZWxhdGlvblR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUpCit2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBl
bGVtZW50LCBTdHlsZTo6UmVsYXRpb246OlR5cGUgcmVsYXRpb25UeXBlLCBPcHRpb25hbDxBc3Nl
bWJsZXI6OlJlZ2lzdGVySUQ+IHZhbHVlKQogewogICAgIEFTU0VSVChtX3NlbGVjdG9yQ29udGV4
dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpOwogCkBAIC0yMTk5LDIwICsyMjAw
LDIwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFkZFMKICAgICBmdW5j
dGlvbkNhbGwuY2FsbCgpOwogCiAgICAgQXNzZW1ibGVyOjpBZGRyZXNzIHZlY3RvckFkZHJlc3Mo
Y2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbnRleHQsIHN0eWxlUmVsYXRpb25zKSk7Ci0gICAgYXV0byBkYXRhQWRkcmVzcyA9IHZlY3Rv
ckFkZHJlc3Mud2l0aE9mZnNldChTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb25zOjpkYXRh
TWVtb3J5T2Zmc2V0KCkpOwotICAgIGF1dG8gc2l6ZUFkZHJlc3MgPSB2ZWN0b3JBZGRyZXNzLndp
dGhPZmZzZXQoU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uczo6c2l6ZU1lbW9yeU9mZnNl
dCgpKTsKKyAgICBhdXRvIGRhdGFBZGRyZXNzID0gdmVjdG9yQWRkcmVzcy53aXRoT2Zmc2V0KFN0
eWxlOjpSZWxhdGlvbnM6OmRhdGFNZW1vcnlPZmZzZXQoKSk7CisgICAgYXV0byBzaXplQWRkcmVz
cyA9IHZlY3RvckFkZHJlc3Mud2l0aE9mZnNldChTdHlsZTo6UmVsYXRpb25zOjpzaXplTWVtb3J5
T2Zmc2V0KCkpOwogCiAgICAgTG9jYWxSZWdpc3RlciByZWxhdGlvblBvaW50ZXIobV9yZWdpc3Rl
ckFsbG9jYXRvcik7CiAgICAgbV9hc3NlbWJsZXIubG9hZDMyKHNpemVBZGRyZXNzLCByZWxhdGlv
blBvaW50ZXIpOwogICAgIG1fYXNzZW1ibGVyLnN1YjMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCByZWxhdGlvblBvaW50ZXIpOwotICAgIG1fYXNzZW1ibGVyLm11bDMyKEFzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKHNpemVvZihTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb24pKSwgcmVs
YXRpb25Qb2ludGVyLCByZWxhdGlvblBvaW50ZXIpOworICAgIG1fYXNzZW1ibGVyLm11bDMyKEFz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihTdHlsZTo6UmVsYXRpb24pKSwgcmVsYXRpb25Q
b2ludGVyLCByZWxhdGlvblBvaW50ZXIpOwogICAgIG1fYXNzZW1ibGVyLmFkZFB0cihkYXRhQWRk
cmVzcywgcmVsYXRpb25Qb2ludGVyKTsKIAotICAgIEFzc2VtYmxlcjo6QWRkcmVzcyB0eXBlQWRk
cmVzcyhyZWxhdGlvblBvaW50ZXIsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OlN0
eWxlUmVsYXRpb24sIHR5cGUpKTsKKyAgICBBc3NlbWJsZXI6OkFkZHJlc3MgdHlwZUFkZHJlc3Mo
cmVsYXRpb25Qb2ludGVyLCBPQkpFQ1RfT0ZGU0VUT0YoU3R5bGU6OlJlbGF0aW9uLCB0eXBlKSk7
CiAgICAgbV9hc3NlbWJsZXIuc3RvcmUzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihyZWxhdGlv
blR5cGUpLCB0eXBlQWRkcmVzcyk7CiAKICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgQXNzZW1i
bGVyOjpBZGRyZXNzIHZhbHVlQWRkcmVzcyhyZWxhdGlvblBvaW50ZXIsIE9CSkVDVF9PRkZTRVRP
RihTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb24sIHZhbHVlKSk7CisgICAgICAgIEFzc2Vt
Ymxlcjo6QWRkcmVzcyB2YWx1ZUFkZHJlc3MocmVsYXRpb25Qb2ludGVyLCBPQkpFQ1RfT0ZGU0VU
T0YoU3R5bGU6OlJlbGF0aW9uLCB2YWx1ZSkpOwogICAgICAgICBtX2Fzc2VtYmxlci5zdG9yZTMy
KCp2YWx1ZSwgdmFsdWVBZGRyZXNzKTsKICAgICB9CiB9CkBAIC0zMDU2LDcgKzMwNTcsNyBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiB7CiAgICAgZ2VuZXJhdGVT
cGVjaWFsRmFpbHVyZUluUXVpcmtzTW9kZUZvckFjdGl2ZUFuZEhvdmVySWZOZWVkZWQoZmFpbHVy
ZUNhc2VzLCBmcmFnbWVudCk7CiAKLSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29s
dmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVS
ZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2ZSk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9u
SWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246
OkFmZmVjdGVkQnlBY3RpdmUpOwogCiAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fz
c2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlv
bkNhbGxzKTsKICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVsZW1lbnRJc0Fj
dGl2ZSk7CkBAIC0zMTA1LDcgKzMxMDYsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtCiAgICAgbV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgaXNFbXB0eVJlc3VsdHMpOwogICAgIG5vdEVtcHR5LmxpbmsoJm1fYXNzZW1ibGVyKTsK
IAotICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFk
ZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5
RW1wdHksIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRChpc0VtcHR5UmVzdWx0cykpOworICAgIGdlbmVy
YXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3Rl
ciwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5RW1wdHksIEFzc2VtYmxlcjo6UmVnaXN0ZXJJ
RChpc0VtcHR5UmVzdWx0cykpOwogCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxl
ci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpaZXJvLCBpc0VtcHR5UmVzdWx0cykpOwogfQpAQCAt
MzE0MCwxNCArMzE0MSwxNCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVF
bGVtCiAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRv
cik7CiAgICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVtcElmTm90UmVz
b2x2aW5nU3R5bGUoY2hlY2tpbmdDb250ZXh0KTsKIAotICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxh
dGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKKyAgICBnZW5l
cmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBwYXJlbnRFbGVtZW50LCBTdHls
ZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyk7CiAgICAgbV9y
ZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIocGFyZW50RWxlbWVudCk7CiAKICAg
ICAvLyBUaGUgcGFyZW50IG1hcmtpbmcgaXMgdW5jb25kaXRpb25hbC4gSWYgdGhlIG1hdGNoaW5n
IGlzIG5vdCBhIHN1Y2Nlc3MsIHdlIGNhbiBub3cgZmFpbC4KICAgICAvLyBPdGhlcndpc2Ugd2Ug
bmVlZCB0byBhcHBseSBzZXRGaXJzdENoaWxkU3RhdGUoKSBvbiB0aGUgUmVuZGVyU3R5bGUuCiAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVy
OjpOb25aZXJvLCBpc0ZpcnN0Q2hpbGRSZWdpc3RlcikpOwogCi0gICAgZ2VuZXJhdGVBZGRTdHls
ZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0
b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpGaXJzdENoaWxkKTsKKyAgICBnZW5lcmF0ZUFkZFN0
eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHls
ZTo6UmVsYXRpb246OkZpcnN0Q2hpbGQpOwogCiAgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygm
bV9hc3NlbWJsZXIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNo
VGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgaXNGaXJzdENoaWxkUmVnaXN0ZXIpKTsKQEAgLTMx
NjIsNyArMzE2Myw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0K
IHsKICAgICBnZW5lcmF0ZVNwZWNpYWxGYWlsdXJlSW5RdWlya3NNb2RlRm9yQWN0aXZlQW5kSG92
ZXJJZk5lZWRlZChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKIAotICAgIGdlbmVyYXRlQWRkU3R5
bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0
b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5SG92ZXIpOworICAgIGdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3Rlciwg
U3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5SG92ZXIpOwogCiAgICAgRnVuY3Rpb25DYWxsIGZ1
bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9j
YXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRy
ZXNzKGVsZW1lbnRJc0hvdmVyZWQpOwpAQCAtMzIyNCwxNCArMzIyNSwxNCBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgTG9jYWxSZWdpc3RlciBjaGVja2lu
Z0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7CiAgICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJl
c29sdmluZ1N0eWxlID0ganVtcElmTm90UmVzb2x2aW5nU3R5bGUoY2hlY2tpbmdDb250ZXh0KTsK
IAotICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVs
ZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5
TGFzdENoaWxkUnVsZXMpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0Nv
bnRleHQsIHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5
TGFzdENoaWxkUnVsZXMpOwogICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVhbGxvY2F0ZVJlZ2lz
dGVyKHBhcmVudEVsZW1lbnQpOwogCiAgICAgLy8gVGhlIHBhcmVudCBtYXJraW5nIGlzIHVuY29u
ZGl0aW9uYWwuIElmIHRoZSBtYXRjaGluZyBpcyBub3QgYSBzdWNjZXNzLCB3ZSBjYW4gbm93IGZh
aWwuCiAgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gYXBwbHkgc2V0TGFzdENoaWxkU3RhdGUo
KSBvbiB0aGUgUmVuZGVyU3R5bGUuCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxl
ci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpOb25aZXJvLCBpc0xhc3RDaGlsZFJlZ2lzdGVyKSk7
CiAKLSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50
QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246Okxhc3RDaGls
ZCk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVu
dEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0aW9uOjpMYXN0Q2hpbGQpOwogCiAgICAgbm90
UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgaXNMYXN0Q2hp
bGRSZWdpc3RlcikpOwpAQCAtMzI4Myw4ICszMjg0LDggQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIExvY2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250ZXh0KG1f
cmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgIEFzc2VtYmxlcjo6SnVtcCBub3RSZXNvbHZpbmdTdHls
ZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5nQ29udGV4dCk7CiAKLSAgICBnZW5l
cmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBwYXJlbnRFbGVtZW50LCBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRS
dWxlcyk7Ci0gICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgcGFy
ZW50RWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlcyk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNr
aW5nQ29udGV4dCwgcGFyZW50RWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpDaGlsZHJlbkFmZmVj
dGVkQnlGaXJzdENoaWxkUnVsZXMpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVj
a2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZl
Y3RlZEJ5TGFzdENoaWxkUnVsZXMpOwogCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9j
YXRlUmVnaXN0ZXIocGFyZW50RWxlbWVudCk7CiAKQEAgLTMyOTIsOCArMzI5Myw4IEBAIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAvLyBPdGhlcndpc2Ugd2Ug
bmVlZCB0byBhcHBseSBzZXRMYXN0Q2hpbGRTdGF0ZSgpIG9uIHRoZSBSZW5kZXJTdHlsZS4KICAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6
Ok5vblplcm8sIGlzT25seUNoaWxkUmVnaXN0ZXIpKTsKIAotICAgIGdlbmVyYXRlQWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9y
Q2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Rmlyc3RDaGlsZCk7Ci0gICAgZ2VuZXJhdGVBZGRTdHls
ZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0
b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpMYXN0Q2hpbGQpOworICAgIGdlbmVyYXRlQWRkU3R5
bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFN0eWxl
OjpSZWxhdGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNo
ZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0aW9uOjpM
YXN0Q2hpbGQpOwogCiAgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOwog
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxl
cjo6Tm9uWmVybywgaXNPbmx5Q2hpbGRSZWdpc3RlcikpOwpAQCAtMzMwMyw3ICszMzA0LDcgQEAg
c3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZQogewogICAgIGlmIChpczxI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChjaGVj
a2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNv
bHZpbmdTdHlsZSkKLSAgICAgICAgICAgIGNoZWNraW5nQ29udGV4dC0+c3R5bGVSZWxhdGlvbnMu
YXBwZW5kKHsgKmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VW5pcXVl
LCAxIH0pOworICAgICAgICAgICAgY2hlY2tpbmdDb250ZXh0LT5zdHlsZVJlbGF0aW9ucy5hcHBl
bmQoeyAqZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpVbmlxdWUsIDEgfSk7CiAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpLmlzUGxh
Y2Vob2xkZXJWaXNpYmxlKCk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM0NTcsNyAr
MzQ1OCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc0FkamFjZW50UmVsYXRpb24oZnJhZ21lbnQucmVsYXRp
b25Ub1JpZ2h0RnJhZ21lbnQpKQotICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJl
c29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CisgICAgICAgIGdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3Rlciwg
U3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgIC8vIFNl
dHVwIHRoZSBjb3VudGVyIGF0IDEuCiAgICAgTG9jYWxSZWdpc3RlcldpdGhQcmVmZXJlbmNlIGVs
ZW1lbnRDb3VudGVyKG1fcmVnaXN0ZXJBbGxvY2F0b3IsIEpTQzo6R1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKQEAgLTM0NzUsNyArMzQ3Niw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW0KIAogICAgICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG5vQ2FjaGVkQ2hpbGRJ
bmRleENhc2VzOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50
KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZpb3VzU2libGluZyk7Ci0gICAgICAgIGdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUocHJldmlvdXNTaWJsaW5nLCBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CisgICAgICAgIGdl
bmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUocHJldmlvdXNTaWJsaW5nLCBT
dHlsZTo6UmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAgICAgICAgIG5vQ2FjaGVkQ2hp
bGRJbmRleENhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpa
ZXJvLCBBc3NlbWJsZXI6OkFkZHJlc3MocHJldmlvdXNTaWJsaW5nLCBOb2RlOjpub2RlRmxhZ3NN
ZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdIYXNSYXJl
RGF0YSgpKSkpOwogICAgICAgICB7CiAgICAgICAgICAgICBMb2NhbFJlZ2lzdGVyIGVsZW1lbnRS
YXJlRGF0YShtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKQEAgLTM0OTEsMTMgKzM0OTIsMTMgQEAgdm9p
ZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogCiAgICAgICAgIEFzc2VtYmxl
cjo6TGFiZWwgbG9vcFN0YXJ0ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKICAgICAgICAgZ2VuZXJh
dGVXYWxrVG9QcmV2aW91c0FkamFjZW50RWxlbWVudChub01vcmVTaWJsaW5nc0Nhc2VzLCBwcmV2
aW91c1NpYmxpbmcpOwotICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmlu
Z1N0eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpB
ZmZlY3RzTmV4dFNpYmxpbmcpOworICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJl
c29sdmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RzTmV4
dFNpYmxpbmcpOwogICAgICAgICBtX2Fzc2VtYmxlci5hZGQzMihBc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgZWxlbWVudENvdW50ZXIpOwogICAgICAgICBtX2Fzc2VtYmxlci5qdW1wKCkubGlu
a1RvKGxvb3BTdGFydCwgJm1fYXNzZW1ibGVyKTsKICAgICAgICAgbm9Nb3JlU2libGluZ3NDYXNl
cy5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgfQogCi0gICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0
aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNr
ZXI6OlN0eWxlUmVsYXRpb246Ok50aENoaWxkSW5kZXgsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRChl
bGVtZW50Q291bnRlcikpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5n
U3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0aW9uOjpOdGhDaGlsZElu
ZGV4LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQoZWxlbWVudENvdW50ZXIpKTsKIAogICAgIGZvciAo
Y29uc3QgYXV0byYgc2xvdCA6IHZhbGlkU3Vic2V0RmlsdGVycykKICAgICAgICAgZ2VuZXJhdGVO
dGhGaWx0ZXJUZXN0KGZhaWx1cmVDYXNlcywgZWxlbWVudENvdW50ZXIsIHNsb3QuZmlyc3QsIHNs
b3Quc2Vjb25kKTsKQEAgLTM1MjQsNyArMzUyNSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc0FkamFjZW50
UmVsYXRpb24oZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQpKQotICAgICAgICBnZW5l
cmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0
ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2li
bGluZyk7CisgICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUo
ZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlv
dXNTaWJsaW5nKTsKIAogICAgIGZvciAoY29uc3QgTnRoQ2hpbGRPZlNlbGVjdG9ySW5mbyogbnRo
Q2hpbGRPZlNlbGVjdG9ySW5mbyA6IHZhbGlkU3Vic2V0RmlsdGVycykgewogICAgICAgICAvLyBT
ZXR1cCB0aGUgY291bnRlciBhdCAxLgpAQCAtMzU0MSw3ICszNTQyLDcgQEAgdm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICAgICAgQXNzZW1ibGVyOjpMYWJl
bCBsb29wU3RhcnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwogCiAgICAgICAgICAgICBnZW5lcmF0
ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZp
b3VzU2libGluZyk7Ci0gICAgICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29s
dmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9u
OjpBZmZlY3RzTmV4dFNpYmxpbmcpOworICAgICAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0
aW9uSWZSZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcsIFN0eWxlOjpSZWxhdGlvbjo6QWZm
ZWN0c05leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBsb2Nh
bEZhaWx1cmVDYXNlczsKICAgICAgICAgICAgIGdlbmVyYXRlRWxlbWVudE1hdGNoZXNTZWxlY3Rv
ckxpc3QobG9jYWxGYWlsdXJlQ2FzZXMsIHByZXZpb3VzU2libGluZywgbnRoQ2hpbGRPZlNlbGVj
dG9ySW5mby0+c2VsZWN0b3JMaXN0KTsKQEAgLTM1NjQsNyArMzU2NSw3IEBAIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgTG9jYWxSZWdpc3RlciBwYXJl
bnRFbGVtZW50KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1Bh
cmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBwYXJlbnRFbGVtZW50KTsKIAotICAgICAgICBnZW5l
cmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKHBhcmVudEVsZW1lbnQsIFNlbGVj
dG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3Np
dGlvbmFsUnVsZXMpOworICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmlu
Z1N0eWxlKHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwogCiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
bV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgQXNzZW1ibGVyOjpBZGRy
ZXNzKHBhcmVudEVsZW1lbnQsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNldCgpKSwgQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0lzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSkp
KTsKIApAQCAtMzYwNyw3ICszNjA4LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbQogICAgICAgICBMb2NhbFJlZ2lzdGVyIHBhcmVudEVsZW1lbnQobV9yZWdpc3Rl
ckFsbG9jYXRvcik7CiAgICAgICAgIGdlbmVyYXRlV2Fsa1RvUGFyZW50RWxlbWVudChmYWlsdXJl
Q2FzZXMsIHBhcmVudEVsZW1lbnQpOwogCi0gICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlv
bklmUmVzb2x2aW5nU3R5bGUocGFyZW50RWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJl
bGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFs
UnVsZXMpOworICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxl
KHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVy
dHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAogICAgICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIEFzc2VtYmxl
cjo6QWRkcmVzcyhwYXJlbnRFbGVtZW50LCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSks
IEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc1BhcnNpbmdDaGlsZHJlbkZpbmlz
aGVkKCkpKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTk3NjM2
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAzMiw3ICsyMDMyLDExIEBAIFJlZjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxl
bWUKICAgICBSZXNvdXJjZUxvYWRTdXNwZW5kZXIgc3VzcGVuZGVyOwogCiAgICAgVGVtcG9yYXJ5
Q2hhbmdlPGJvb2w+IGNoYW5nZShtX2lnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cywgdHJ1ZSk7Ci0g
ICAgcmV0dXJuIGVsZW1lbnQucmVzb2x2ZVN0eWxlKHBhcmVudFN0eWxlKTsKKyAgICBhdXRvIGVs
ZW1lbnRTdHlsZSA9IGVsZW1lbnQucmVzb2x2ZVN0eWxlKHBhcmVudFN0eWxlKTsKKworICAgIFN0
eWxlOjpjb21taXRSZWxhdGlvbnNUb0RvY3VtZW50KFdURk1vdmUoZWxlbWVudFN0eWxlLnJlbGF0
aW9ucykpOworCisgICAgcmV0dXJuIFdURk1vdmUoZWxlbWVudFN0eWxlLnJlbmRlclN0eWxlKTsK
IH0KIAogYm9vbCBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWZEaW1lbnNpb25zT3V0T2ZEYXRlKEVs
ZW1lbnQmIGVsZW1lbnQsIERpbWVuc2lvbnNDaGVjayBkaW1lbnNpb25zQ2hlY2spCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIFN0eWxl
UmVzb2x2ZXImIEVsZW1lbnQ6OnN0eWxlUmVzb2x2ZXIoKQogICAgIHJldHVybiBkb2N1bWVudCgp
LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKIH0KIAotUmVmPFJlbmRlclN0eWxlPiBFbGVtZW50Ojpy
ZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorRWxlbWVudFN0eWxlIEVsZW1l
bnQ6OnJlc29sdmVTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgcmV0dXJu
IHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnRoaXMsIHBhcmVudFN0eWxlKTsKIH0K
QEAgLTMyODcsMTAgKzMyODcsMTAgQEAgdm9pZCBFbGVtZW50OjpkaWREZXRhY2hSZW5kZXJlcnMo
KQogICAgIEFTU0VSVChoYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSk7CiB9CiAKLVJl
ZlB0cjxSZW5kZXJTdHlsZT4gRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJT
dHlsZSYsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gRWxlbWVudDo6cmVz
b2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqKQogewogICAgIEFTU0VS
VChoYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKIHZvaWQgRWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVz
RnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYgb3RoZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xh
c3MgUHNldWRvRWxlbWVudDsKIGNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwogY2xhc3Mg
UmVuZGVyVHJlZVBvc2l0aW9uOworc3RydWN0IEVsZW1lbnRTdHlsZTsKIAogZW51bSBTcGVsbGNo
ZWNrQXR0cmlidXRlU3RhdGUgewogICAgIFNwZWxsY2hlY2tBdHRyaWJ1dGVUcnVlLApAQCAtNDc5
LDcgKzQ4MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJz
KCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXRhY2hSZW5kZXJlcnMoKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkRGV0YWNoUmVuZGVyZXJzKCk7Ci0gICAgdmlydHVhbCBSZWZQdHI8UmVuZGVyU3R5
bGU+IGN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEVsZW1lbnRT
dHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVy
U3R5bGUqIHNoYWRvd0hvc3RTdHlsZSk7CiAKICAgICBMYXlvdXRSZWN0IGFic29sdXRlRXZlbnRI
YW5kbGVyQm91bmRzKGJvb2wmIGluY2x1ZGVzRml4ZWRQb3NpdGlvbkVsZW1lbnRzKSBvdmVycmlk
ZTsKIApAQCAtNDk4LDcgKzQ5OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcigpOwotICAgIFJlZjxSZW5kZXJTdHlsZT4gcmVzb2x2ZVN0eWxl
KFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgRWxlbWVudFN0eWxlIHJlc29sdmVTdHls
ZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogCiAgICAgdmlydHVhbCB2b2lkIGlzVmlzaWJs
ZUluVmlld3BvcnRDaGFuZ2VkKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1
ZG9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRl
clF1b3RlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTc2LDkgKzc3LDEyIEBAIHZvaWQgUHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxl
bWVudCgpCiAgICAgbV9ob3N0RWxlbWVudCA9IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxSZW5kZXJT
dHlsZT4gUHNldWRvRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gUHNldWRv
RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqKQogewotICAgIHJldHVybiBtX2hvc3RFbGVtZW50LT5yZW5kZXJlcigpLT5nZXRD
YWNoZWRQc2V1ZG9TdHlsZShtX3BzZXVkb0lkLCAmcGFyZW50U3R5bGUpOworICAgIGF1dG8qIHN0
eWxlID0gbV9ob3N0RWxlbWVudC0+cmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUobV9w
c2V1ZG9JZCwgJnBhcmVudFN0eWxlKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4g
TnVsbG9wdDsKKyAgICByZXR1cm4gRWxlbWVudFN0eWxlKCpzdHlsZSk7CiB9CiAKIHZvaWQgUHNl
dWRvRWxlbWVudDo6ZGlkQXR0YWNoUmVuZGVyZXJzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Qc2V1ZG9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVk
b0VsZW1lbnQuaAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVk
b0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAg
RWxlbWVudCogaG9zdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RFbGVtZW50OyB9CiAg
ICAgdm9pZCBjbGVhckhvc3RFbGVtZW50KCk7CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1
c3RvbVN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHls
ZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+
IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJz
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKSBvdmVy
cmlkZTsKICAgICBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmKSBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkocmV2
aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBTdHJpbmdXaXRoRGlyZWN0aW9uIEhU
TUxUaXRsZUVsZW1lbnQ6OmNvCiAgICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0g
dGhpcy0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxl
LT5kaXJlY3Rpb24oKTsKICAgICBlbHNlIHsKLSAgICAgICAgYXV0byBzdHlsZSA9IHJlc29sdmVT
dHlsZShwYXJlbnRFbGVtZW50KCkgPyBwYXJlbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCkgOiBu
dWxscHRyKTsKKyAgICAgICAgYXV0byBzdHlsZSA9IHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVs
ZW1lbnQoKnRoaXMsIHBhcmVudEVsZW1lbnQoKSA/IHBhcmVudEVsZW1lbnQoKS0+cmVuZGVyU3R5
bGUoKSA6IG51bGxwdHIpLnJlbmRlclN0eWxlOwogICAgICAgICBkaXJlY3Rpb24gPSBzdHlsZS5n
ZXQoKS5kaXJlY3Rpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIFN0cmluZ1dpdGhEaXJlY3Rpb24o
dGV4dCgpLCBkaXJlY3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKQEAgLTU3Myw3ICs1NzQsNyBAQCBIVE1MSW5wdXRFbGVtZW50KiBTbGlkZXJUaHVt
YkVsZW1lbnQ6OmhvCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHNoYWRv
d0hvc3QoKSk7CiB9CiAKLVJlZlB0cjxSZW5kZXJTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50Ojpj
dXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqIGhvc3RTdHls
ZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQogewogICAgIC8v
IFRoaXMgZG9lc24ndCBhY3R1YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlzIGp1c3QgYSBoYWNr
IHRvIHBpY2sgc2hhZG93IHBzZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMga25vd24uCiAKQEAg
LTU4MSw3ICs1ODIsNyBAQCBSZWZQdHI8UmVuZGVyU3R5bGU+IFNsaWRlclRodW1iRWxlbWVudDo6
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gbWVkaWFTbGlk
ZXJUaHVtYlNoYWRvd1BzZXVkb0lkKCItd2Via2l0LW1lZGlhLXNsaWRlci10aHVtYiIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogCiAgICAgaWYgKCFob3N0U3R5bGUpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKIAogICAgIHN3
aXRjaCAoaG9zdFN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIE1lZGlhU2xpZGVyUGFy
dDoKQEAgLTU5Niw3ICs1OTcsNyBAQCBSZWZQdHI8UmVuZGVyU3R5bGU+IFNsaWRlclRodW1iRWxl
bWVudDo6CiAgICAgICAgIG1fc2hhZG93UHNldWRvSWQgPSBzbGlkZXJUaHVtYlNoYWRvd1BzZXVk
b0lkOwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxsb3B0Owog
fQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFNsaWRlclRodW1iRWxlbWVudDo6c2hhZG93UHNldWRv
SWQoKSBjb25zdApAQCAtNjI3LDcgKzYyOCw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBT
bGlkZXJDb250YWluZXIKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2xpZGVyQ29u
dGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwogfQogCi1SZWZQdHI8UmVuZGVyU3R5bGU+
IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5
bGUmLCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlk
ZXJDb250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5k
ZXJTdHlsZSogaG9zdFN0eWxlKQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1YWxseSBjb21w
dXRlIHN0eWxlLiBUaGlzIGlzIGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBzZXVkbyBpZCB3
aGVuIGhvc3Qgc3R5bGUgaXMga25vd24uCiAKQEAgLTYzNSw3ICs2MzYsNyBAQCBSZWZQdHI8UmVu
ZGVyU3R5bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21pY1N0cmluZz4gc2xpZGVyQ29udGFpbmVyKCItd2Via2l0LXNsaWRlci1jb250
YWluZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKIAogICAgIGlmICgh
aG9zdFN0eWxlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CiAKICAgICBzd2l0Y2ggKGhvc3RTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBN
ZWRpYVNsaWRlclBhcnQ6CkBAIC02NTAsNyArNjUxLDcgQEAgUmVmUHRyPFJlbmRlclN0eWxlPiBT
bGlkZXJDb250YWluZXJFbGVtZQogICAgICAgICBtX3NoYWRvd1BzZXVkb0lkID0gc2xpZGVyQ29u
dGFpbmVyOwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxsb3B0
OwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnNoYWRv
d1BzZXVkb0lkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgdm9pZCB3aWxsRGV0YWNoUmVuZGVyZXJz
KCkgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1c3RvbVN0eWxlRm9yUmVu
ZGVyZXIoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOworICAgIE9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5
bGUqKSBvdmVycmlkZTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHN0YXJ0RHJhZ2dpbmcoKTsKQEAgLTEzNSw3ICsx
MzUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNsaWRlckNvbnRhaW5lckVsZW1lbnQoRG9j
dW1lbnQmKTsKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRl
cmVyKFJlZjxSZW5kZXJTdHlsZT4mJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJp
ZGU7Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjdXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRl
clN0eWxlJiwgUmVuZGVyU3R5bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5
bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKikgb3ZlcnJp
ZGU7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgQXRvbWljU3RyaW5nIG1fc2hhZG93UHNldWRvSWQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAJKHJldmlzaW9uIDE5NzYzNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50SW5wdXRUeXBlLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZi5oPgpAQCAtNzQsNyArNzUsNyBAQCBSZWY8VGV4dENvbnRyb2xJbm5l
ckVsZW1lbnQ+IFRleHRDb250cm9sCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dENvbnRy
b2xJbm5lckVsZW1lbnQoZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPFJlbmRlclN0eWxlPiBUZXh0
Q29udHJvbElubmVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYs
IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IFRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBS
ZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQogewogICAgIGF1dG8gaW5uZXJDb250YWluZXJT
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICBpbm5lckNvbnRhaW5lclN0eWxlLmdl
dCgpLmluaGVyaXRGcm9tKHNoYWRvd0hvc3RTdHlsZSk7CkBAIC04OCw3ICs4OSw3IEBAIFJlZlB0
cjxSZW5kZXJTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW0KICAgICAvLyBXZSBkb24ndCB3YW50
IHRoZSBzaGFkb3cgZG9tIHRvIGJlIGVkaXRhYmxlLCBzbyB3ZSBzZXQgdGhpcyBibG9jayB0byBy
ZWFkLW9ubHkgaW4gY2FzZSB0aGUgaW5wdXQgaXRzZWxmIGlzIGVkaXRhYmxlLgogICAgIGlubmVy
Q29udGFpbmVyU3R5bGUuZ2V0KCkuc2V0VXNlck1vZGlmeShSRUFEX09OTFkpOwogCi0gICAgcmV0
dXJuIFdURk1vdmUoaW5uZXJDb250YWluZXJTdHlsZSk7CisgICAgcmV0dXJuIEVsZW1lbnRTdHls
ZShXVEZNb3ZlKGlubmVyQ29udGFpbmVyU3R5bGUpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC0xMzMsOSArMTM0LDkgQEAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJs
b2NrKiBUZXh0Q29udHJvbAogICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbElu
bmVyQmxvY2s+KEhUTUxEaXZFbGVtZW50OjpyZW5kZXJlcigpKTsKIH0KIAotUmVmUHRyPFJlbmRl
clN0eWxlPiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVy
ZXIoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8
RWxlbWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlc29sdmVDdXN0b21T
dHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7Ci0gICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqc2hhZG93SG9zdCgp
KS5jcmVhdGVJbm5lclRleHRTdHlsZSgqc2hhZG93SG9zdFN0eWxlKTsKKyAgICByZXR1cm4gRWxl
bWVudFN0eWxlKGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqc2hhZG93SG9z
dCgpKS5jcmVhdGVJbm5lclRleHRTdHlsZSgqc2hhZG93SG9zdFN0eWxlKSk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0NywxOCArMTQ4LDE3IEBAIFRleHRDb250
cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpUZXh0Q29udHIKICAgICBzZXRIYXNDdXN0b21TdHlsZVJl
c29sdmVDYWxsYmFja3MoKTsKIH0KIAotUmVmUHRyPFJlbmRlclN0eWxlPiBUZXh0Q29udHJvbFBs
YWNlaG9sZGVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50
U3R5bGU+IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQog
ewogICAgIGF1dG8gc3R5bGUgPSByZXNvbHZlU3R5bGUoJnBhcmVudFN0eWxlKTsKIAogICAgIGF1
dG8mIGNvbnRyb2xFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+
KCpjb250YWluaW5nU2hhZG93Um9vdCgpLT5ob3N0KCkpOwotICAgIHN0eWxlLT5zZXREaXNwbGF5
KGNvbnRyb2xFbGVtZW50LmlzUGxhY2Vob2xkZXJWaXNpYmxlKCkgPyBCTE9DSyA6IE5PTkUpOwor
ICAgIHN0eWxlLnJlbmRlclN0eWxlLT5zZXREaXNwbGF5KGNvbnRyb2xFbGVtZW50LmlzUGxhY2Vo
b2xkZXJWaXNpYmxlKCkgPyBCTE9DSyA6IE5PTkUpOwogCiAgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KGNvbnRyb2xFbGVtZW50KSkgewogICAgICAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihjb250cm9sRWxlbWVudCk7Ci0gICAgICAgIHN0eWxl
LT5zZXRUZXh0T3ZlcmZsb3coaW5wdXRFbGVtZW50LnNob3VsZFRydW5jYXRlVGV4dCgqc2hhZG93
SG9zdFN0eWxlKSA/IFRleHRPdmVyZmxvd0VsbGlwc2lzIDogVGV4dE92ZXJmbG93Q2xpcCk7Cisg
ICAgICAgIHN0eWxlLnJlbmRlclN0eWxlLT5zZXRUZXh0T3ZlcmZsb3coaW5wdXRFbGVtZW50LnNo
b3VsZFRydW5jYXRlVGV4dCgqc2hhZG93SG9zdFN0eWxlKSA/IFRleHRPdmVyZmxvd0VsbGlwc2lz
IDogVGV4dE92ZXJmbG93Q2xpcCk7CiAgICAgfQotCiAgICAgcmV0dXJuIFdURk1vdmUoc3R5bGUp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2aXNpb24gMTk3NjM3KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1c3RvbVN0
eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hh
ZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29s
dmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFk
b3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNNb3VzZUZvY3Vz
YWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC02NSw3ICs2NSw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KERvY3Vt
ZW50Jik7CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJl
cihSZWY8UmVuZGVyU3R5bGU+JiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRl
OwotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBib29sIGlzVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogfTsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudChEb2N1bWVudCYpOwogICAg
IAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7
CiB9OwogCiBjbGFzcyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50IGZpbmFsIDogcHVi
bGljIEhUTUxEaXZFbGVtZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3Niw5ICsxNTc2LDkg
QEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxlbWVudDo6ZwogICAgIGF1dG8mIHN0
eWxlUmVzb2x2ZXIgPSBlbGVtZW50KCktPnN0eWxlUmVzb2x2ZXIoKTsKIAogICAgIGlmIChwc2V1
ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgPT0gRklSU1RfTElORV9JTkhFUklURUQpIHsKLSAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHQgPSBzdHlsZVJlc29sdmVyLnN0eWxlRm9yRWxl
bWVudCgqZWxlbWVudCgpLCBwYXJlbnRTdHlsZSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc3R5
bGVSZXNvbHZlci5zdHlsZUZvckVsZW1lbnQoKmVsZW1lbnQoKSwgcGFyZW50U3R5bGUpLnJlbmRl
clN0eWxlOwogICAgICAgICByZXN1bHQtPnNldFN0eWxlVHlwZShGSVJTVF9MSU5FX0lOSEVSSVRF
RCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gV1RG
TW92ZShyZXN1bHQpOwogICAgIH0KIAogICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnBzZXVkb1N0
eWxlRm9yRWxlbWVudCgqZWxlbWVudCgpLCBwc2V1ZG9TdHlsZVJlcXVlc3QsICpwYXJlbnRTdHls
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
Miw5ICszNTIsOSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJOYW1lZEZsb3dGCiAg
ICAgQVNTRVJUKCFyZW5kZXJlci5pc0Fub255bW91cygpKTsKIAogICAgIC8vIEZJWE1FOiBSZWdp
b24gc3R5bGluZyBmYWlscyBmb3IgcHNldWRvLWVsZW1lbnRzIGJlY2F1c2UgdGhlIHJlbmRlcmVy
cyBkb24ndCBoYXZlIGEgbm9kZS4KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlbmRlck9iamVj
dFJlZ2lvblN0eWxlID0gcmVuZGVyZXIuZWxlbWVudCgpLT5zdHlsZVJlc29sdmVyKCkuc3R5bGVG
b3JFbGVtZW50KCpyZW5kZXJlci5lbGVtZW50KCksICZwYXJlbnRTdHlsZSwgTWF0Y2hBbGxSdWxl
cywgdGhpcyk7CisgICAgYXV0byByZW5kZXJPYmplY3RSZWdpb25TdHlsZSA9IHJlbmRlcmVyLmVs
ZW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqcmVuZGVyZXIuZWxlbWVu
dCgpLCAmcGFyZW50U3R5bGUsIE1hdGNoQWxsUnVsZXMsIHRoaXMpLnJlbmRlclN0eWxlOwogCi0g
ICAgcmV0dXJuIHJlbmRlck9iamVjdFJlZ2lvblN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
V1RGTW92ZShyZW5kZXJPYmplY3RSZWdpb25TdHlsZSk7CiB9CiAKIHZvaWQgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ6OmNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlbGF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZWxhdGlvbnMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZWxhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlUmVsYXRpb25zLmgiCisKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFt
ZXNwYWNlIFN0eWxlIHsKKworc3RkOjp1bmlxdWVfcHRyPFJlbGF0aW9ucz4gY29tbWl0UmVsYXRp
b25zVG9SZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQsIGNvbnN0IFJlbGF0aW9ucyYgcmVsYXRpb25zKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZWxhdGlvbnM+IHJlbWFpbmluZ1JlbGF0aW9uczsKKworICAgIGF1dG8gYXBwZW5kU3R5bGVSZWxh
dGlvbiA9IFsmcmVtYWluaW5nUmVsYXRpb25zXSAoY29uc3QgUmVsYXRpb24mIHJlbGF0aW9uKSB7
CisgICAgICAgIGlmICghcmVtYWluaW5nUmVsYXRpb25zKQorICAgICAgICAgICAgcmVtYWluaW5n
UmVsYXRpb25zID0gc3RkOjptYWtlX3VuaXF1ZTxSZWxhdGlvbnM+KCk7CisgICAgICAgIHJlbWFp
bmluZ1JlbGF0aW9ucy0+YXBwZW5kKHJlbGF0aW9uKTsKKyAgICB9OworCisgICAgZm9yIChhdXRv
JiByZWxhdGlvbiA6IHJlbGF0aW9ucykgeworICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQg
IT0gJmVsZW1lbnQpIHsKKyAgICAgICAgICAgIGFwcGVuZFN0eWxlUmVsYXRpb24ocmVsYXRpb24p
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChyZWxh
dGlvbi50eXBlKSB7CisgICAgICAgIGNhc2UgUmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmU6Cisg
ICAgICAgICAgICBzdHlsZS5zZXRBZmZlY3RlZEJ5QWN0aXZlKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0ZWRCeURyYWc6CisgICAgICAgICAgICBz
dHlsZS5zZXRBZmZlY3RlZEJ5RHJhZygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUmVsYXRpb246OkFmZmVjdGVkQnlFbXB0eToKKyAgICAgICAgICAgIHN0eWxlLnNldEVtcHR5
U3RhdGUocmVsYXRpb24udmFsdWUpOworICAgICAgICAgICAgYXBwZW5kU3R5bGVSZWxhdGlvbihy
ZWxhdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZm
ZWN0ZWRCeUhvdmVyOgorICAgICAgICAgICAgc3R5bGUuc2V0QWZmZWN0ZWRCeUhvdmVyKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6Rmlyc3RDaGlsZDoKKyAg
ICAgICAgICAgIHN0eWxlLnNldEZpcnN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUmVsYXRpb246Okxhc3RDaGlsZDoKKyAgICAgICAgICAgIHN0eWxlLnNl
dExhc3RDaGlsZFN0YXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxh
dGlvbjo6VW5pcXVlOgorICAgICAgICAgICAgc3R5bGUuc2V0VW5pcXVlKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGlu
ZzoKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nOgorICAgICAgICBj
YXNlIFJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoK
KyAgICAgICAgY2FzZSBSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVz
OgorICAgICAgICBjYXNlIFJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2Vk
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXM6CisgICAgICAgIGNhc2UgUmVsYXRpb246OkNoaWxkcmVu
QWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzOgorICAgICAgICBjYXNlIFJlbGF0aW9uOjpOdGhDaGls
ZEluZGV4OgorICAgICAgICAgICAgYXBwZW5kU3R5bGVSZWxhdGlvbihyZWxhdGlvbik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVtYWluaW5nUmVs
YXRpb25zOworfQorCit2b2lkIGNvbW1pdFJlbGF0aW9uc1RvRG9jdW1lbnQoc3RkOjp1bmlxdWVf
cHRyPFJlbGF0aW9ucz4gcmVsYXRpb25zKQoreworICAgIGlmICghcmVsYXRpb25zKQorICAgICAg
ICByZXR1cm47CisgICAgZm9yIChhdXRvJiByZWxhdGlvbiA6ICpyZWxhdGlvbnMpIHsKKyAgICAg
ICAgYXV0byYgZWxlbWVudCA9IGNvbnN0X2Nhc3Q8RWxlbWVudCY+KHJlbGF0aW9uLmVsZW1lbnQp
OworICAgICAgICBzd2l0Y2ggKHJlbGF0aW9uLnR5cGUpIHsKKyAgICAgICAgY2FzZSBSZWxhdGlv
bjo6QWZmZWN0ZWRCeUFjdGl2ZToKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZl
Y3RlZEJ5QWN0aXZlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlv
bjo6QWZmZWN0ZWRCeURyYWc6CisgICAgICAgICAgICBlbGVtZW50LnNldENoaWxkcmVuQWZmZWN0
ZWRCeURyYWcoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpB
ZmZlY3RlZEJ5RW1wdHk6CisgICAgICAgICAgICBlbGVtZW50LnNldFN0eWxlQWZmZWN0ZWRCeUVt
cHR5KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0
ZWRCeUhvdmVyOgorICAgICAgICAgICAgZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlIb3Zl
cigpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVsYXRpb246OkFmZmVjdGVk
QnlQcmV2aW91c1NpYmxpbmc6CisgICAgICAgICAgICBlbGVtZW50LnNldFN0eWxlSXNBZmZlY3Rl
ZEJ5UHJldmlvdXNTaWJsaW5nKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBS
ZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nOgorICAgICAgICAgICAgZWxlbWVudC5zZXRBZmZl
Y3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxl
czoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3Np
dGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9u
OjpDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXM6CisgICAgICAgICAgICBlbGVtZW50
LnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcygpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFz
ZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2hpbGRy
ZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAgIGVsZW1l
bnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1
bGVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6Q2hpbGRy
ZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXM6CisgICAgICAgICAgICBlbGVtZW50LnNldENoaWxk
cmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBSZWxhdGlvbjo6Rmlyc3RDaGlsZDoKKyAgICAgICAgICAgIGlmIChhdXRvKiBzdHls
ZSA9IGVsZW1lbnQucmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Rmly
c3RDaGlsZFN0YXRlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlv
bjo6TGFzdENoaWxkOgorICAgICAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gZWxlbWVudC5yZW5k
ZXJTdHlsZSgpKQorICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVsYXRpb246Ok50aENoaWxkSW5kZXg6
CisgICAgICAgICAgICBlbGVtZW50LnNldENoaWxkSW5kZXgocmVsYXRpb24udmFsdWUpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVsYXRpb246OlVuaXF1ZToKKyAgICAgICAg
ICAgIGlmIChhdXRvKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAg
ICAgICBzdHlsZS0+c2V0VW5pcXVlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KK30KKworfQorfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZWxhdGlv
bnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlbGF0aW9ucy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZWxhdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdHls
ZVJlbGF0aW9uc19oCisjZGVmaW5lIFN0eWxlUmVsYXRpb25zX2gKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFbGVtZW50OworY2xhc3Mg
UmVuZGVyU3R5bGU7CisKK25hbWVzcGFjZSBTdHlsZSB7CisKK3N0cnVjdCBSZWxhdGlvbiB7Cisg
ICAgZW51bSBUeXBlIHsKKyAgICAgICAgQWZmZWN0ZWRCeUFjdGl2ZSwKKyAgICAgICAgQWZmZWN0
ZWRCeURyYWcsCisgICAgICAgIEFmZmVjdGVkQnlFbXB0eSwKKyAgICAgICAgQWZmZWN0ZWRCeUhv
dmVyLAorICAgICAgICBBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nLAorICAgICAgICBBZmZlY3Rz
TmV4dFNpYmxpbmcsCisgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzLAorICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMsCisgICAg
ICAgIENoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxl
cywKKyAgICAgICAgQ2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMsCisgICAgICAgIEZp
cnN0Q2hpbGQsCisgICAgICAgIExhc3RDaGlsZCwKKyAgICAgICAgTnRoQ2hpbGRJbmRleCwKKyAg
ICAgICAgVW5pcXVlLAorICAgIH07CisgICAgY29uc3QgRWxlbWVudCYgZWxlbWVudDsKKyAgICBU
eXBlIHR5cGU7CisgICAgdW5zaWduZWQgdmFsdWU7CisKKyAgICBSZWxhdGlvbihjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBUeXBlIHR5cGUsIHVuc2lnbmVkIHZhbHVlID0gMSkKKyAgICAgICAgOiBl
bGVtZW50KGVsZW1lbnQpCisgICAgICAgICwgdHlwZSh0eXBlKQorICAgICAgICAsIHZhbHVlKHZh
bHVlKQorICAgIHsgfQorfTsKKwordXNpbmcgUmVsYXRpb25zID0gVmVjdG9yPFJlbGF0aW9uLCA4
PjsKKworc3RkOjp1bmlxdWVfcHRyPFJlbGF0aW9ucz4gY29tbWl0UmVsYXRpb25zVG9SZW5kZXJT
dHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQmLCBjb25zdCBSZWxhdGlvbnMmKTsKK3Zv
aWQgY29tbWl0UmVsYXRpb25zVG9Eb2N1bWVudChzdGQ6OnVuaXF1ZV9wdHI8UmVsYXRpb25zPik7
CisKK30KK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNoYXJp
bmdSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVT
aGFyaW5nUmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw3ICsz
MjIsNyBAQCBib29sIFNoYXJpbmdSZXNvbHZlcjo6c3R5bGVTaGFyaW5nQ2FuZGlkCiAgICAgaWYg
KCFydWxlU2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBFbGVtZW50UnVsZUNvbGxl
Y3RvciBjb2xsZWN0b3IoY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Jj4oZWxlbWVudCksIG51bGxw
dHIsIG1fcnVsZVNldHMsICZtX3NlbGVjdG9yRmlsdGVyKTsKKyAgICBFbGVtZW50UnVsZUNvbGxl
Y3RvciBjb2xsZWN0b3IoY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Jj4oZWxlbWVudCksIG1fcnVs
ZVNldHMsICZtX3NlbGVjdG9yRmlsdGVyKTsKICAgICByZXR1cm4gY29sbGVjdG9yLmhhc0FueU1h
dGNoaW5nUnVsZXMocnVsZVNldCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZVRyZWVSZXNvbHZlci5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDE3ICsx
NzksMjAgQEAgUmVmPFJlbmRlclN0eWxlPiBUcmVlUmVzb2x2ZXI6OnN0eWxlRm9yRQogICAgIH0K
IAogICAgIGlmIChlbGVtZW50Lmhhc0N1c3RvbVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKSB7Ci0g
ICAgICAgIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUgPSBudWxscHRyOwotICAgICAgICBp
ZiAoYXV0byogc2hhZG93Um9vdCA9IHNjb3BlKCkuc2hhZG93Um9vdCkKLSAgICAgICAgICAgIHNo
YWRvd0hvc3RTdHlsZSA9IHNoYWRvd1Jvb3QtPmhvc3QoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAg
ICAgaWYgKFJlZlB0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBlbGVtZW50LmN1c3RvbVN0eWxlRm9y
UmVuZGVyZXIoaW5oZXJpdGVkU3R5bGUsIHNoYWRvd0hvc3RTdHlsZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gc3R5bGUucmVsZWFzZU5vbk51bGwoKTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHNoYWRv
d0hvc3RTdHlsZSA9IHNjb3BlKCkuc2hhZG93Um9vdCA/IHNjb3BlKCkuc2hhZG93Um9vdC0+aG9z
dCgpLT5yZW5kZXJTdHlsZSgpIDogbnVsbHB0cjsKKyAgICAgICAgaWYgKGF1dG8gY3VzdG9tU3R5
bGUgPSBlbGVtZW50LnJlc29sdmVDdXN0b21TdHlsZShpbmhlcml0ZWRTdHlsZSwgc2hhZG93SG9z
dFN0eWxlKSkgeworICAgICAgICAgICAgU3R5bGU6OmNvbW1pdFJlbGF0aW9uc1RvRG9jdW1lbnQo
V1RGTW92ZShjdXN0b21TdHlsZS0+cmVsYXRpb25zKSk7CisgICAgICAgICAgICByZXR1cm4gV1RG
TW92ZShjdXN0b21TdHlsZS0+cmVuZGVyU3R5bGUpOworICAgICAgICB9CiAgICAgfQogCiAgICAg
aWYgKGF1dG8qIHNoYXJpbmdFbGVtZW50ID0gc2NvcGUoKS5zaGFyaW5nUmVzb2x2ZXIucmVzb2x2
ZShlbGVtZW50KSkKICAgICAgICAgcmV0dXJuICpzaGFyaW5nRWxlbWVudC0+cmVuZGVyU3R5bGUo
KTsKIAotICAgIHJldHVybiBzY29wZSgpLnN0eWxlUmVzb2x2ZXIuc3R5bGVGb3JFbGVtZW50KGVs
ZW1lbnQsICZpbmhlcml0ZWRTdHlsZSwgTWF0Y2hBbGxSdWxlcywgbnVsbHB0ciwgJnNjb3BlKCku
c2VsZWN0b3JGaWx0ZXIpOworICAgIGF1dG8gZWxlbWVudFN0eWxlID0gc2NvcGUoKS5zdHlsZVJl
c29sdmVyLnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCAmaW5oZXJpdGVkU3R5bGUsIE1hdGNoQWxs
UnVsZXMsIG51bGxwdHIsICZzY29wZSgpLnNlbGVjdG9yRmlsdGVyKTsKKworICAgIFN0eWxlOjpj
b21taXRSZWxhdGlvbnNUb0RvY3VtZW50KFdURk1vdmUoZWxlbWVudFN0eWxlLnJlbGF0aW9ucykp
OworICAgIHJldHVybiBXVEZNb3ZlKGVsZW1lbnRTdHlsZS5yZW5kZXJTdHlsZSk7CiB9CiAKICNp
ZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRy
ZWVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJl
ZVJlc29sdmVyLmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRzLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVBvc2l0
aW9uLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JG
aWx0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNoYW5nZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hhcmlu
Z1Jlc29sdmVyLmgiCkBAIC02Miw2ICs2Myw3IEBAIHByaXZhdGU6CiAgICAgQ2hhbmdlIHJlc29s
dmVFbGVtZW50KEVsZW1lbnQmKTsKICAgICB2b2lkIHJlc29sdmVCZWZvcmVPckFmdGVyUHNldWRv
RWxlbWVudChFbGVtZW50JiwgQ2hhbmdlLCBQc2V1ZG9JZCwgUmVuZGVyVHJlZVBvc2l0aW9uJik7
CiAKKwogICAgIHZvaWQgY3JlYXRlUmVuZGVyVHJlZVJlY3Vyc2l2ZWx5KEVsZW1lbnQmLCBSZW5k
ZXJTdHlsZSYsIFJlbmRlclRyZWVQb3NpdGlvbiYsIFJlZlB0cjxSZW5kZXJTdHlsZT4mJiByZXNv
bHZlZFN0eWxlKTsKICAgICB2b2lkIGNyZWF0ZVJlbmRlcmVyKEVsZW1lbnQmLCBSZW5kZXJUcmVl
UG9zaXRpb24mLCBSZWZQdHI8UmVuZGVyU3R5bGU+JiYgcmVzb2x2ZWRTdHlsZSk7CiAgICAgdm9p
ZCBjcmVhdGVSZW5kZXJUcmVlRm9yQmVmb3JlT3JBZnRlclBzZXVkb0VsZW1lbnQoRWxlbWVudCYs
IFBzZXVkb0lkLCBSZW5kZXJUcmVlUG9zaXRpb24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzg4LDExICs3ODgsMTEgQEAgdm9pZCBTVkdFbGVt
ZW50OjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1YQogICAgIGNvbnRleHRFbGVtZW50LT5zeW5jaHJv
bml6ZVN5c3RlbUxhbmd1YWdlKCk7CiB9CiAKLVJlZlB0cjxSZW5kZXJTdHlsZT4gU1ZHRWxlbWVu
dDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRl
clN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3Rv
bVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqKQogewogICAgIC8v
IElmIHRoZSBlbGVtZW50IGlzIGluIGEgPHVzZT4gdHJlZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20g
dGhlIGRlZmluaXRpb24gdHJlZS4KICAgICBpZiAoYXV0byogc3R5bGVFbGVtZW50ID0gdGhpcy0+
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+c3R5
bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqc3R5bGVFbGVtZW50LCAmcGFyZW50U3R5bGUp
OworICAgICAgICByZXR1cm4gc3R5bGVFbGVtZW50LT5yZXNvbHZlU3R5bGUoJnBhcmVudFN0eWxl
KTsKIAogICAgIHJldHVybiByZXNvbHZlU3R5bGUoJnBhcmVudFN0eWxlKTsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHN5bmNocm9uaXplQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYpIGNvbnN0OwogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXplQWxsQW5pbWF0ZWRT
VkdBdHRyaWJ1dGUoU1ZHRWxlbWVudCopOwogIAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3Vz
dG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4g
cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUq
IHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6
ZVJlcXVpcmVkRmVhdHVyZXMoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQpOwogICAgIHN0YXRp
YyB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRFeHRlbnNpb25zKFNWR0VsZW1lbnQqIGNvbnRleHRF
bGVtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgJKHJl
dmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEu
aAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBy
ZXR1cm4gMDsKICAgICAgICAgaWYgKCFtX292ZXJyaWRlQ29tcHV0ZWRTdHlsZSB8fCBtX25lZWRz
T3ZlcnJpZGVDb21wdXRlZFN0eWxlVXBkYXRlKSB7CiAgICAgICAgICAgICAvLyBUaGUgc3R5bGUg
Y29tcHV0ZWQgaGVyZSBjb250YWlucyBubyBDU1MgQW5pbWF0aW9ucy9UcmFuc2l0aW9ucyBvciBT
TUlMIGluZHVjZWQgcnVsZXMgLSB0aGlzIGlzIG5lZWRlZCB0byBjb21wdXRlIHRoZSAiYmFzZSB2
YWx1ZSIgZm9yIHRoZSBTTUlMIGFuaW1hdGlvbiBzYW5kd2hpY2ggbW9kZWwuCi0gICAgICAgICAg
ICBtX292ZXJyaWRlQ29tcHV0ZWRTdHlsZSA9IGVsZW1lbnQuc3R5bGVSZXNvbHZlcigpLnN0eWxl
Rm9yRWxlbWVudChlbGVtZW50LCBwYXJlbnRTdHlsZSwgTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NN
SUwpOworICAgICAgICAgICAgbV9vdmVycmlkZUNvbXB1dGVkU3R5bGUgPSBlbGVtZW50LnN0eWxl
UmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoZWxlbWVudCwgcGFyZW50U3R5bGUsIE1hdGNoQWxs
UnVsZXNFeGNsdWRpbmdTTUlMKS5yZW5kZXJTdHlsZTsKICAgICAgICAgICAgIG1fbmVlZHNPdmVy
cmlkZUNvbXB1dGVkU3R5bGVVcGRhdGUgPSBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NF
UlQobV9vdmVycmlkZUNvbXB1dGVkU3R5bGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273188</attachid>
            <date>2016-03-07 09:45:05 -0800</date>
            <delta_ts>2016-03-08 01:49:54 -0800</delta_ts>
            <desc>patch</desc>
            <filename>style-relations-5.patch</filename>
            <type>text/plain</type>
            <size>95135</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzY4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2NSBAQAorMjAxNi0wMy0wNyAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3Igc2hvdWxkIG5vdCBtdXRhdGUgZG9jdW1lbnQgYW5kIHN0eWxlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxMTMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3ZlIGFwcGx5aW5nIG9mIHN0eWxlIHJl
bGF0aW9ucyBvdXQgb2YgRWxlbWVudFJ1bGVDb2xsZWN0b3IgYW5kIFN0eWxlUmVzb2x2ZXIuCisg
ICAgICAgIFRoaXMgZ2V0cyB1cyBjbG9zZXIgdG8gbWFraW5nIFN0eWxlUmVzb2x2ZXIgY29uc3Qg
Zm9yIEVsZW1lbnQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0VsZW1lbnRSdWxl
Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVjdG9yOjpF
bGVtZW50UnVsZUNvbGxlY3Rvcik6CisKKyAgICAgICAgICAgIE5vIG5lZWQgZm9yIHN0eWxlIHBh
cmFtZXRlciBhbnltb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rv
cjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVD
b2xsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMpOgorCisgICAgICAgICAgICBDbGll
bnQgd2lsbCBub3cgZG8gdGhlIHN0eWxlIGFuZCBlbGVtZW50IG11dGF0aW9ucy4gSnVzdCBjb2xs
ZWN0IHRoZSBkYXRhIGhlcmUuCisKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVj
dG9yOjpjb2xsZWN0TWF0Y2hpbmdSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFJ1bGVDb2xsZWN0b3I6OmNvbW1pdFN0eWxlUmVsYXRpb25zKTogRGVsZXRlZC4KKworICAg
ICAgICAgICAgTW92ZXMgdG8gU3R5bGVSZWxhdGlvbnMuY3BwCisKKyAgICAgICAgKiBjc3MvRWxl
bWVudFJ1bGVDb2xsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSdWxlQ29sbGVj
dG9yOjpoYXNNYXRjaGVkUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJ1bGVDb2xs
ZWN0b3I6Om1hdGNoZWRQc2V1ZG9FbGVtZW50SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRSdWxlQ29sbGVjdG9yOjpzdHlsZVJlbGF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50UnVsZUNvbGxlY3Rvcjo6ZGlkTWF0Y2hVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKToKKyAg
ICAgICAgKiBjc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFRdWVyeU1hdGNoZXI6OnByZXBhcmVFdmFsdWF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRlKToKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZFN0eWxlUmVsYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6aXNGaXJzdENoaWxkRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjppc0ZpcnN0T2ZU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvdW50RWxlbWVudHNCZWZvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6Y291bnRFbGVtZW50c09mVHlwZUJlZm9yZSk6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNoZWNrZXI6Om1hdGNoUmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tlci5o
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDaGVja2VyOjpDaGVja2luZ0NvbnRleHQ6OkNo
ZWNraW5nQ29udGV4dCk6CisgICAgICAgICogY3NzL1N0eWxlTWVkaWEuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVNZWRpYTo6bWF0Y2hNZWRpdW0pOgorICAgICAgICAqIGNzcy9TdHlsZVJl
c29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6aXNBdFNoYWRvd0JvdW5kYXJ5KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6CisKKyAgICAgICAgICAgIEFw
cGx5IHRoZSBzdHlsZSByZWxhdGlvbnMgYWZmZWN0aW5nIGN1cnJlbnQgc3R5bGUgaW1tZWRpYXRl
bHkuCisgICAgICAgICAgICBQYXNzIHRoZSByZXN0IHRvIHRoZSBjbGllbnQuCisKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAg
ICAgKiBjc3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFN0eWxl
OjpFbGVtZW50U3R5bGUpOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlU2VsZWN0b3JDaGVja2VyRXhjbHVkaW5nUHNl
dWRvRWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZURpcmVjdEFkamFjZW50VHJlZVdhbGtlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlSW5kaXJlY3RBZGphY2VudFRyZWVXYWxrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JDb21waWxlcjo6YWRkU3R5bGVSZWxhdGlvbkZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50SXNBY3RpdmUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0VtcHR5KToKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVt
ZW50SXNGaXJzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNIb3ZlcmVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVFbGVtZW50SXNMYXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc09ubHlDaGlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjptYWtlQ29udGV4dFN0eWxlVW5pcXVl
SWZOZWNlc3NhcnlBbmRUZXN0SXNQbGFjZWhvbGRlclNob3duKToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
SXNOdGhDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzTnRoQ2hpbGRPZik6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbWVudElzTnRoTGFzdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGls
ZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNOdGhMYXN0Q2hpbGRP
Zik6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3Vt
ZW50OjpzdHlsZUZvckVsZW1lbnRJZ25vcmluZ1BlbmRpbmdTdHlsZXNoZWV0cyk6CisKKyAgICAg
ICAgICAgIEFwcGx5IHN0eWxlIHJlbGF0aW9ucy4KKworICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnVwZGF0ZUxheW91dElmRGltZW5zaW9uc091dE9mRGF0ZSk6CisgICAgICAgICogZG9tL0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c3R5bGVSZXNvbHZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZXNvbHZlU3R5bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6ZGlkRGV0YWNoUmVuZGVyZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisKKyAgICAgICAgICAgIFJldHVybiBFbGVtZW50U3R5
bGUgKHdoaWNoIGNvbnRhaW5zIHN0eWxlIHJlbGF0aW9ucyBhbG9uZyB3aXRoIHRoZSByZW5kZXIg
c3R5bGUpLgorICAgICAgICAgICAgUmVuYW1lIGZvciBjb25zaXN0ZW5jeS4KKworICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERlbGV0ZWQuCisgICAg
ICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmlzVmlzaWJs
ZUluVmlld3BvcnRDaGFuZ2VkKToKKyAgICAgICAgKiBkb20vUHNldWRvRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpjbGVhckhvc3RFbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50OjpkaWRBdHRhY2hSZW5kZXJlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6UHNldWRvRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERlbGV0ZWQu
CisgICAgICAgICogZG9tL1BzZXVkb0VsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxUaXRs
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6Y29tcHV0
ZWRUZXh0V2l0aERpcmVjdGlvbik6CisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6aG9zdElu
cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6cmVzb2x2ZUN1c3Rv
bVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlclRodW1iRWxlbWVudDo6c2hhZG93UHNl
dWRvSWQpOgorICAgICAgICAoV2ViQ29yZTo6U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3JlYXRl
RWxlbWVudFJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNsaWRlckNvbnRhaW5lckVsZW1l
bnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJDb250YWlu
ZXJFbGVtZW50OjpzaGFkb3dQc2V1ZG9JZCk6CisgICAgICAgIChXZWJDb3JlOjpTbGlkZXJUaHVt
YkVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2xpZGVyQ29udGFpbmVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERl
bGV0ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvU2xpZGVyVGh1bWJFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJFbGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dENvbnRyb2xJbm5lckVsZW1lbnQ6OnJlc29sdmVDdXN0b21TdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlbmRlcmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVudDo6cmVzb2x2ZUN1c3Rv
bVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50
OjpUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJFbGVtZW50OjpjdXN0b21TdHlsZUZvclJlbmRlcmVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb250cm9sSW5uZXJUZXh0RWxlbWVu
dDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpU
ZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcik6IERl
bGV0ZWQuCisgICAgICAgICogaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRWxlbWVudDo6Z2V0VW5jYWNoZWRQc2V1ZG9TdHlsZSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck5hbWVkRmxvd0ZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck5hbWVkRmxvd0ZyYWdtZW50Ojpjb21wdXRlU3R5bGVJblJlZ2lvbik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJOYW1lZEZsb3dGcmFnbWVudDo6Y29tcHV0ZUNoaWxkcmVuU3R5bGVJblJl
Z2lvbik6CisgICAgICAgICogc3R5bGUvU3R5bGVSZWxhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpjb21taXRSZWxhdGlvbnNUb1JlbmRlclN0eWxlKToKKworICAg
ICAgICAgICAgQ29tbWl0IHJlbGF0aW9ucyBhZmZlY3Rpbmcgc3R5bGUgdGhhdGlzIGJlaW5nIGNv
bXB1dGVkLgorCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6Y29tbWl0UmVsYXRpb25zVG9Eb2N1
bWVudCk6CisKKyAgICAgICAgICAgIENvbW1pdCByZWxhdGlvbnMgdGhhdCBtdXRhdGUgZG9jdW1l
bnQuCisKKyAgICAgICAgKiBzdHlsZS9TdHlsZVJlbGF0aW9ucy5oOiBBZGRlZC4KKworICAgICAg
ICAgICAgRmFjdG9yIHN0eWxlIHJlbGF0aW9uIGRhdGEgc3RydWN0dXJlcyBhbmQgZnVuY3Rpb25z
IHRvIGEgZmlsZSBvZiB0aGVpciBvd24uCisKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpSZWxh
dGlvbjo6UmVsYXRpb24pOgorICAgICAgICAqIHN0eWxlL1N0eWxlU2hhcmluZ1Jlc29sdmVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpTaGFyaW5nUmVzb2x2ZXI6OnN0eWxlU2hhcmlu
Z0NhbmRpZGF0ZU1hdGNoZXNSdWxlU2V0KToKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNv
bHZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VHJlZVJlc29sdmVyOjpzdHlsZUZv
ckVsZW1lbnQpOgorCisgICAgICAgICAgICBBcHBseSBzdHlsZSByZWxhdGlvbnMuCisKKyAgICAg
ICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnN5bmNocm9uaXplU3lzdGVtTGFu
Z3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIp
OiBEZWxldGVkLgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NW
R0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudFJhcmVEYXRh
OjpvdmVycmlkZUNvbXB1dGVkU3R5bGUpOgorCiAyMDE2LTAzLTA3ICBBbmRyZWFzIEtsaW5nICA8
YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIFJlbmRlclN0eWxlIGNvcHktb24td3Jp
dGUgYSBiaXQgbGVzcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTc2MzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMjYy
OSw2ICsyNjI5LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIHN0eWxlL1JlbmRlclRyZWVQ
b3NpdGlvbi5jcHAKICAgICBzdHlsZS9TdHlsZUNoYW5nZS5jcHAKICAgICBzdHlsZS9TdHlsZUZv
bnRTaXplRnVuY3Rpb25zLmNwcAorICAgIHN0eWxlL1N0eWxlUmVsYXRpb25zLmNwcAogICAgIHN0
eWxlL1N0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmNwcAogICAgIHN0eWxlL1N0eWxlU2hhcmluZ1Jl
c29sdmVyLmNwcAogICAgIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NjE5LDYgKzY2MTksOCBAQAogCQlFNDUzOTA0OTBF
QUZENjM3MDAzNjk1QzggLyogV2ViQ29yZVN5c3RlbUludGVyZmFjZUlPUy5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NTM5MDM4MEVBRkQ2MzcwMDM2
OTVDOCAvKiBXZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tICovOyB9OwogCQlFNDUzOTA0RDBF
QUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQ1MzkwM0MwRUFGRDYzNzAwMzY5NUM4IC8qIFdpZGdldElP
Uy5tbSAqLzsgfTsKIAkJRTQ1MzkwQUUwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3RlbU1lbW9yeUlP
Uy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDUz
OTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9TLmNwcCAqLzsgfTsKKwkJRTQ2
MTgwMkQxQzhERDI5MDAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYxODAyQzFDOEREMjkwMDAyNkMwMkMg
LyogU3R5bGVSZWxhdGlvbnMuaCAqLzsgfTsKKwkJRTQ2MTgwMkYxQzhERDREMjAwMjZDMDJDIC8q
IFN0eWxlUmVsYXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEU0NjE4MDJFMUM4REQ0RDIwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5jcHAg
Ki87IH07CiAJCUU0NjFENjVEMUJCMEM3RjAwMENCNTY0NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDYxRDY1
QzFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuY3BwICovOyB9OwogCQlFNDYx
RDY1RjFCQjBDODBEMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0NjFENjVFMUJCMEM4MEQwMENCNTY0
NSAvKiBBdXRob3JTdHlsZVNoZWV0cy5oICovOyB9OwogCQlFNDYyQTRBMTExM0U3MUJFMDA0QTQy
MjAgLyogSW50UG9pbnRIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNDYyQTRBMDExM0U3MUJFMDA0QTQyMjAgLyogSW50UG9pbnRIYXNoLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTE0NjQ0LDYg
KzE0NjQ2LDggQEAKIAkJRTQ1MzkwMzgwRUFGRDYzNzAwMzY5NUM4IC8qIFdlYkNvcmVTeXN0ZW1J
bnRlcmZhY2VJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBX
ZWJDb3JlU3lzdGVtSW50ZXJmYWNlSU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlFNDUzOTAzQzBFQUZENjM3MDAzNjk1QzggLyogV2lkZ2V0SU9TLm1tICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV2lkZ2V0SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDUzOTBBRDBFQUZGNEI1MDAzNjk1QzggLyogU3lzdGVtTWVtb3J5SU9T
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5c3RlbU1lbW9yeUlP
Uy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0NjE4MDJDMUM4REQyOTAwMDI2
QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBTdHlsZVJlbGF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDYxODAy
RTFDOERENEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVSZWxhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFNDYxRDY1QzFCQjBDN0YwMDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVl
dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXV0aG9yU3R5bGVT
aGVldHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNDYxRDY1RTFCQjBDODBE
MDBDQjU2NDUgLyogQXV0aG9yU3R5bGVTaGVldHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQXV0aG9yU3R5bGVTaGVldHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTQ2MkE0QTAxMTNFNzFCRTAwNEE0MjIwIC8qIEludFBvaW50SGFzaC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBJbnRQb2ludEhhc2guaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTIzNTE3LDYgKzIzNTIxLDggQEAKIAkJCQlFNDAxRTBBMzFDM0MwQjgzMDBG
MzREMTAgLyogU3R5bGVDaGFuZ2UuaCAqLywKIAkJCQlFNEQ1OEVCNjE3QjRFRDg5MDBDQkRDQTgg
LyogU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJRTRENThFQjcxN0I0RUQ4OTAw
Q0JEQ0E4IC8qIFN0eWxlRm9udFNpemVGdW5jdGlvbnMuaCAqLywKKwkJCQlFNDYxODAyRTFDOERE
NEQyMDAyNkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwICovLAorCQkJCUU0NjE4MDJDMUM4REQy
OTAwMDI2QzAyQyAvKiBTdHlsZVJlbGF0aW9ucy5oICovLAogCQkJCUU0RDU4RUIyMTdCNERCREMw
MENCRENBOCAvKiBTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5jcHAgKi8sCiAJCQkJRTRENThFQjMx
N0I0REJEQzAwQ0JEQ0E4IC8qIFN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmggKi8sCiAJCQkJRTQ3
QTNBQzIxQzVFQUJCRTAwQ0NCRkE3IC8qIFN0eWxlU2hhcmluZ1Jlc29sdmVyLmNwcCAqLywKQEAg
LTI1MTg4LDYgKzI1MTk0LDcgQEAKIAkJCQlGRDMxNUZGRjEyQjAyNjc2MDBDMUEzNTkgLyogQ2hh
bm5lbE1lcmdlck5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMzE2MDAyMTJCMDI2NzYwMEMx
QTM1OSAvKiBDaGFubmVsU3BsaXR0ZXJOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZB
MDA5OURGMDI3MDA5MEQ3ODEgLyogQ2hhcmFjdGVyRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RTQ2MTgwMkQxQzhERDI5MDAwMjZDMDJDIC8qIFN0eWxlUmVsYXRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQlDNTU5MkY3ODFBOTJBQTI4MDAxRjg4NjIgLyogQ2hhcmFjdGVyUHJvcGVydGllcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTdCOEZGRDExNkFFN0Y5NjAwMzgzODhEIC8qIENoYXJhY3Rl
clJlZmVyZW5jZVBhcnNlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTJBMEQw
MDZDMUQwMEVGNkYyNiAvKiBDaGFyc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjI3Nyw3
ICsyNjI4NCw2IEBACiAJCQkJNTE0ODQ1M0YxQkI5RDA3RTAwNkE3MkVEIC8qIElEQkVycm9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4QjFCQjRDNEU4MDAxMjg5OEYgLyogSURCRXZlbnRE
aXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTg1RkM4RDFCQjRDNEU4MDAxMjg5OEYg
LyogSURCRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNTFGNDFBNzIxQkE3M0I1QjAwMkUw
NTNCIC8qIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2
OUE2Q0JBRDFDNkJFNDJDMDBCODM2RTkgLyogQWNjZXNzaWJpbGl0eVNWR0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUxMDMxMDUwMUJBOENDMDMwMDMzMjlDMCAvKiBJREJGYWN0b3J5SW1w
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE4NUZDOEYxQkI0QzRFODAwMTI4OThGIC8qIElEQkdl
dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTI2Miw2ICsyOTI2OCw3IEBACiAJCQkJQkM2
NEI0RDkwQ0I0Mjk4QTAwNUYyQjYyIC8qIENTU0ZvbnRGYWNlU3JjVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNEE2RTlGQzMxM0MxN0QxRDAwNDZBN0Y4IC8qIENTU0ZvbnRGZWF0dXJlVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM2NEI0REIwQ0I0Mjk4QTAwNUYyQjYyIC8qIENT
U0ZvbnRTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlFNDYxODAyRjFDOERENEQyMDAy
NkMwMkMgLyogU3R5bGVSZWxhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZDRjEw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU0ZvbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
QzAyQTY0NjBFMDlBQUU5MDA0QjZEMkIgLyogQ1NTRnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQzIzRTRFMTBEQUFDRTBGMDA5RkRDOTEgLyogQ1NTR3JhZGllbnRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxl
Q29sbGVjdG9yLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsOSArNzgsOCBAQCBw
dWJsaWM6CiAgICAgY29uc3QgYm9vbCBpbmNsdWRlRW1wdHlSdWxlczsKIH07CiAKLUVsZW1lbnRS
dWxlQ29sbGVjdG9yOjpFbGVtZW50UnVsZUNvbGxlY3RvcihFbGVtZW50JiBlbGVtZW50LCBSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzLCBjb25zdCBT
ZWxlY3RvckZpbHRlciogc2VsZWN0b3JGaWx0ZXIpCitFbGVtZW50UnVsZUNvbGxlY3Rvcjo6RWxl
bWVudFJ1bGVDb2xsZWN0b3IoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgRG9jdW1lbnRSdWxlU2V0
cyYgcnVsZVNldHMsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKICAgICA6
IG1fZWxlbWVudChlbGVtZW50KQotICAgICwgbV9zdHlsZShzdHlsZSkKICAgICAsIG1fYXV0aG9y
U3R5bGUoKnJ1bGVTZXRzLmF1dGhvclN0eWxlKCkpCiAgICAgLCBtX3VzZXJTdHlsZShydWxlU2V0
cy51c2VyU3R5bGUoKSkKICAgICAsIG1fc2VsZWN0b3JGaWx0ZXIoc2VsZWN0b3JGaWx0ZXIpCkBA
IC0xMzMsNyArMTMyLDYgQEAgaW5saW5lIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmFkZEVs
ZQogdm9pZCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6Y29sbGVjdE1hdGNoaW5nUnVsZXMoY29uc3Qg
TWF0Y2hSZXF1ZXN0JiBtYXRjaFJlcXVlc3QsIFN0eWxlUmVzb2x2ZXI6OlJ1bGVSYW5nZSYgcnVs
ZVJhbmdlKQogewogICAgIEFTU0VSVChtYXRjaFJlcXVlc3QucnVsZVNldCk7Ci0gICAgQVNTRVJU
X1dJVEhfTUVTU0FHRSghKG1fbW9kZSA9PSBTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlJlc29sdmlu
Z1N0eWxlICYmICFtX3N0eWxlKSwgIldoZW4gcmVzb2x2aW5nIHN0eWxlLCB0aGUgU2VsZWN0b3JD
aGVja2VyIG11c3QgaGF2ZSBhIHN0eWxlIHRvIHNldCB0aGUgcHNldWRvIGVsZW1lbnRzIGFuZC9v
ciB0byBkbyBtYXJraW5nLiBUaGUgU2VsZWN0b3JDb21waWxlciBhbHNvIHJlbHkgb24gdGhhdCBi
ZWhhdmlvci4iKTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCEobV9tb2RlID09IFNlbGVjdG9y
Q2hlY2tlcjo6TW9kZTo6Q29sbGVjdGluZ1J1bGVzSWdub3JpbmdWaXJ0dWFsUHNldWRvRWxlbWVu
dHMgJiYgbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgIT0gTk9QU0VVRE8pLCAiV2hlbiBp
biBTdHlsZUludmFsaWRhdGlvbiBvciBTaGFyaW5nUnVsZXMsIFNlbGVjdG9yQ2hlY2tlciBkb2Vz
IG5vdCB0cnkgdG8gbWF0Y2ggdGhlIHBzZXVkbyBJRC4gV2hpbGUgRWxlbWVudFJ1bGVDb2xsZWN0
b3Igc3VwcG9ydHMgbWF0Y2hpbmcgYSBwYXJ0aWN1bGFyIHBzZXVkb0lkIGluIHRoaXMgY2FzZSwg
dGhpcyB3b3VsZCBpbmRpY2F0ZSBhIGVycm9yIGF0IHRoZSBjYWxsIHNpdGUgc2luY2UgbWF0Y2hp
bmcgYSBwYXJ0aWN1bGFyIGVsZW1lbnQgc2hvdWxkIGJlIHVubmVjZXNzYXJ5LiIpOwogCiAjaWYg
RU5BQkxFKFZJREVPX1RSQUNLKQpAQCAtMTk0LDEwICsxOTIsNyBAQCB2b2lkIEVsZW1lbnRSdWxl
Q29sbGVjdG9yOjpzb3J0QW5kVHJhbnNmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAv
LyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qg
b2YgZGVjbGFyYXRpb25zLgogICAgIGZvciAoY29uc3QgTWF0Y2hlZFJ1bGUmIG1hdGNoZWRSdWxl
IDogbV9tYXRjaGVkUnVsZXMpIHsKLSAgICAgICAgaWYgKG1fc3R5bGUgJiYgbWF0Y2hlZFJ1bGUu
cnVsZURhdGEtPmNvbnRhaW5zVW5jb21tb25BdHRyaWJ1dGVTZWxlY3RvcigpKQotICAgICAgICAg
ICAgbV9zdHlsZS0+c2V0VW5pcXVlKCk7CiAgICAgICAgIG1fcmVzdWx0LmFkZE1hdGNoZWRQcm9w
ZXJ0aWVzKG1hdGNoZWRSdWxlLnJ1bGVEYXRhLT5ydWxlKCktPnByb3BlcnRpZXMoKSwgbWF0Y2hl
ZFJ1bGUucnVsZURhdGEtPnJ1bGUoKSwgbWF0Y2hlZFJ1bGUucnVsZURhdGEtPmxpbmtNYXRjaFR5
cGUoKSwgbWF0Y2hlZFJ1bGUucnVsZURhdGEtPnByb3BlcnR5V2hpdGVsaXN0VHlwZSgpKTsKICAg
ICB9CiB9CkBAIC00MTQsNyArNDA5LDEyIEBAIGlubGluZSBib29sIEVsZW1lbnRSdWxlQ29sbGVj
dG9yOjpydWxlTWEKICNpZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORwogICAgICAgICBydWxl
RGF0YS5jb21waWxlZFNlbGVjdG9yVXNlZCgpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBzZWxl
Y3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJnNwZWNpZmljaXR5KTsKKyAgICAgICAgYm9vbCBzZWxl
Y3Rvck1hdGNoZXMgPSBzZWxlY3RvckNoZWNrZXIoJm1fZWxlbWVudCwgJnNwZWNpZmljaXR5KTsK
KworICAgICAgICBpZiAoc2VsZWN0b3JNYXRjaGVzICYmIHJ1bGVEYXRhLmNvbnRhaW5zVW5jb21t
b25BdHRyaWJ1dGVTZWxlY3RvcigpKQorICAgICAgICAgICAgbV9kaWRNYXRjaFVuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IgPSB0cnVlOworCisgICAgICAgIHJldHVybiBzZWxlY3Rvck1hdGNoZXM7
CiAgICAgfQogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogCkBAIC00NTAsODYg
KzQ1MCwxNiBAQCBpbmxpbmUgYm9vbCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hCiAgICAg
ICAgIHNlbGVjdG9yTWF0Y2hlcyA9IHNlbGVjdG9yQ2hlY2tlci5tYXRjaCgqc2VsZWN0b3IsIG1f
ZWxlbWVudCwgY29udGV4dCwgc3BlY2lmaWNpdHkpOwogICAgIH0KIAotICAgIGNvbW1pdFN0eWxl
UmVsYXRpb25zKGNvbnRleHQuc3R5bGVSZWxhdGlvbnMpOwotCi0gICAgaWYgKGNvbnRleHQucHNl
dWRvSURTZXQpCi0gICAgICAgIG1fc3R5bGUtPnNldEhhc1BzZXVkb1N0eWxlcyhjb250ZXh0LnBz
ZXVkb0lEU2V0KTsKKyAgICBpZiAocnVsZURhdGEuY29udGFpbnNVbmNvbW1vbkF0dHJpYnV0ZVNl
bGVjdG9yKCkpIHsKKyAgICAgICAgaWYgKHNlbGVjdG9yTWF0Y2hlcyB8fCBjb250ZXh0LnBzZXVk
b0lEU2V0KQorICAgICAgICAgICAgbV9kaWRNYXRjaFVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3Ig
PSB0cnVlOworICAgIH0KKyAgICBtX21hdGNoZWRQc2V1ZG9FbGVtZW50SWRzLm1lcmdlKGNvbnRl
eHQucHNldWRvSURTZXQpOworICAgIG1fc3R5bGVSZWxhdGlvbnMuYXBwZW5kVmVjdG9yKGNvbnRl
eHQuc3R5bGVSZWxhdGlvbnMpOwogCiAgICAgcmV0dXJuIHNlbGVjdG9yTWF0Y2hlczsKIH0KIAot
Ly8gRklYTUU6IFJ1bGUgY29sbGVjdG9yIHNob3VsZCBub3QgYmUgZG9pbmcgbXV0YXRpb25zLiBN
b3ZlIHRoaXMgc29tZXdoZXJlIGVsc2UuCi12b2lkIEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpjb21t
aXRTdHlsZVJlbGF0aW9ucyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb25zJiBz
dHlsZVJlbGF0aW9ucykKLXsKLSAgICBmb3IgKGF1dG8mIHJlbGF0aW9uIDogc3R5bGVSZWxhdGlv
bnMpIHsKLSAgICAgICAgc3dpdGNoIChyZWxhdGlvbi50eXBlKSB7Ci0gICAgICAgIGNhc2UgU2Vs
ZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5QWN0aXZlOgotICAgICAgICAg
ICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAg
bV9zdHlsZS0+c2V0QWZmZWN0ZWRCeUFjdGl2ZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QWN0aXZlKCk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OkFmZmVjdGVkQnlEcmFnOgotICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVt
ZW50ID09ICZtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAgbV9zdHlsZS0+c2V0QWZmZWN0ZWRC
eURyYWcoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZWxhdGlvbi5lbGVt
ZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeUVtcHR5
OgotICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRTdHlsZUFmZmVjdGVkQnlFbXB0eSgp
OwotICAgICAgICAgICAgaWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZS0+c2V0RW1wdHlTdGF0ZShyZWxhdGlvbi52YWx1ZSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRp
b246OkFmZmVjdGVkQnlIb3ZlcjoKLSAgICAgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9
PSAmbV9lbGVtZW50KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldEFmZmVjdGVkQnlIb3Zl
cigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQu
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5SG92ZXIoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3Vz
U2libGluZzoKLSAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0U3R5bGVJc0FmZmVjdGVk
QnlQcmV2aW91c1NpYmxpbmcoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNl
bGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nOgotICAgICAg
ICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXM6Ci0g
ICAgICAgICAgICByZWxhdGlvbi5lbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJk
UG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRS
dWxlczoKLSAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5
Rmlyc3RDaGlsZFJ1bGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFz
ZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoKLSAgICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQu
c2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKLSAgICAgICAg
ICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJh
Y2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RD
aGlsZFJ1bGVzOgotICAgICAgICAgICAgcmVsYXRpb24uZWxlbWVudC5zZXRDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
U2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpGaXJzdENoaWxkOgotICAgICAgICAgICAg
aWYgKCZyZWxhdGlvbi5lbGVtZW50ID09ICZtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAgbV9z
dHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhdXRvKiBz
dHlsZSA9IHJlbGF0aW9uLmVsZW1lbnQucmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAgICBz
dHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246Okxhc3RDaGlsZDoKLSAgICAgICAg
ICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9PSAmbV9lbGVtZW50KQotICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnNldExhc3RDaGlsZFN0YXRlKCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChhdXRv
KiBzdHlsZSA9IHJlbGF0aW9uLmVsZW1lbnQucmVuZGVyU3R5bGUoKSkKLSAgICAgICAgICAgICAg
ICBzdHlsZS0+c2V0TGFzdENoaWxkU3RhdGUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleDoKLSAg
ICAgICAgICAgIHJlbGF0aW9uLmVsZW1lbnQuc2V0Q2hpbGRJbmRleChyZWxhdGlvbi52YWx1ZSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3RvckNoZWNrZXI6OlN0eWxl
UmVsYXRpb246OlVuaXF1ZToKLSAgICAgICAgICAgIGlmICgmcmVsYXRpb24uZWxlbWVudCA9PSAm
bV9lbGVtZW50KQotICAgICAgICAgICAgICAgIG1fc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAg
ICAgICAgZWxzZSBpZiAoYXV0byogc3R5bGUgPSByZWxhdGlvbi5lbGVtZW50LnJlbmRlclN0eWxl
KCkpCi0gICAgICAgICAgICAgICAgc3R5bGUtPnNldFVuaXF1ZSgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OmNv
bGxlY3RNYXRjaGluZ1J1bGVzRm9yTGlzdChjb25zdCBSdWxlU2V0OjpSdWxlRGF0YVZlY3Rvciog
cnVsZXMsIGNvbnN0IE1hdGNoUmVxdWVzdCYgbWF0Y2hSZXF1ZXN0LCBTdHlsZVJlc29sdmVyOjpS
dWxlUmFuZ2UmIHJ1bGVSYW5nZSkKIHsKICAgICBpZiAoIXJ1bGVzKQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw3ICs0NSw3IEBAIHN0cnVjdCBNYXRjaGVkUnVsZSB7CiAKIGNsYXNzIEVsZW1lbnRSdWxl
Q29sbGVjdG9yIHsKIHB1YmxpYzoKLSAgICBFbGVtZW50UnVsZUNvbGxlY3RvcihFbGVtZW50Jiwg
UmVuZGVyU3R5bGUqLCBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiwgY29uc3QgU2VsZWN0b3JGaWx0
ZXIqKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvcihFbGVtZW50JiwgY29uc3QgRG9jdW1lbnRS
dWxlU2V0cyYsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKik7CiAgICAgRWxlbWVudFJ1bGVDb2xsZWN0
b3IoRWxlbWVudCYsIGNvbnN0IFJ1bGVTZXQmIGF1dGhvclN0eWxlLCBjb25zdCBTZWxlY3RvckZp
bHRlciopOwogCiAgICAgdm9pZCBtYXRjaEFsbFJ1bGVzKGJvb2wgbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzLCBib29sIGluY2x1ZGVTTUlMUHJvcGVydGllcyk7CkBAIC02Nyw2ICs2NywxMCBAQCBw
dWJsaWM6CiAgICAgYm9vbCBoYXNNYXRjaGVkUnVsZXMoKSBjb25zdCB7IHJldHVybiAhbV9tYXRj
aGVkUnVsZXMuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBjbGVhck1hdGNoZWRSdWxlcygpOwogCisg
ICAgY29uc3QgUHNldWRvSWRTZXQmIG1hdGNoZWRQc2V1ZG9FbGVtZW50SWRzKCkgY29uc3QgeyBy
ZXR1cm4gbV9tYXRjaGVkUHNldWRvRWxlbWVudElkczsgfQorICAgIGNvbnN0IFN0eWxlOjpSZWxh
dGlvbnMmIHN0eWxlUmVsYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVJlbGF0aW9uczsg
fQorICAgIGJvb2wgZGlkTWF0Y2hVbmNvbW1vbkF0dHJpYnV0ZVNlbGVjdG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaWRNYXRjaFVuY29tbW9uQXR0cmlidXRlU2VsZWN0b3I7IH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGFkZEVsZW1lbnRTdHlsZVByb3BlcnRpZXMoY29uc3QgU3R5bGVQcm9wZXJ0aWVz
KiwgYm9vbCBpc0NhY2hlYWJsZSA9IHRydWUpOwogCkBAIC04NywxMCArOTEsNyBAQCBwcml2YXRl
OgogCiAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBNYXRjaGVkUnVsZSYpOwogCi0gICAg
dm9pZCBjb21taXRTdHlsZVJlbGF0aW9ucyhjb25zdCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVs
YXRpb25zJik7Ci0KICAgICBFbGVtZW50JiBtX2VsZW1lbnQ7Ci0gICAgUmVuZGVyU3R5bGUqIG1f
c3R5bGUgeyBudWxscHRyIH07CiAgICAgY29uc3QgUnVsZVNldCYgbV9hdXRob3JTdHlsZTsKICAg
ICBjb25zdCBSdWxlU2V0KiBtX3VzZXJTdHlsZSB7IG51bGxwdHIgfTsKICAgICBjb25zdCBTZWxl
Y3RvckZpbHRlciogbV9zZWxlY3RvckZpbHRlciB7IG51bGxwdHIgfTsKQEAgLTEwOCw3ICsxMDks
MTAgQEAgcHJpdmF0ZToKIAogICAgIC8vIE91dHB1dC4KICAgICBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZT4+IG1fbWF0Y2hlZFJ1bGVMaXN0OworICAgIGJvb2wgbV9kaWRNYXRjaFVuY29tbW9uQXR0
cmlidXRlU2VsZWN0b3IgeyBmYWxzZSB9OwogICAgIFN0eWxlUmVzb2x2ZXI6Ok1hdGNoUmVzdWx0
IG1fcmVzdWx0OworICAgIFN0eWxlOjpSZWxhdGlvbnMgbV9zdHlsZVJlbGF0aW9uczsKKyAgICBQ
c2V1ZG9JZFNldCBtX21hdGNoZWRQc2V1ZG9FbGVtZW50SWRzOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3Bw
CShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNo
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw5ICs4NSw5IEBAIHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYVF1ZXJ5RXZhbHVhdG9yPiBNZWQKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJvb3RTdHlsZSA9
IG1fZG9jdW1lbnQtPmVuc3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKmRvY3Vt
ZW50RWxlbWVudCwgbV9kb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50
UnVsZXMpOworICAgIGF1dG8gcm9vdFN0eWxlID0gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNv
bHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LT5yZW5k
ZXJTdHlsZSgpLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykucmVuZGVyU3R5bGU7CiAKLSAgICBy
ZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPihtZWRpYVR5cGUoKSwg
bV9kb2N1bWVudC0+ZnJhbWUoKSwgcm9vdFN0eWxlLmdldCgpKTsKKyAgICByZXR1cm4gc3RkOjpt
YWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPihtZWRpYVR5cGUoKSwgbV9kb2N1bWVudC0+
ZnJhbWUoKSwgcm9vdFN0eWxlLnB0cigpKTsKIH0KIAogYm9vbCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6
ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCogbWVkaWEpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNv
cmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEyICs4NCwx
MiBAQCBzdHJ1Y3QgU2VsZWN0b3JDaGVja2VyOjpMb2NhbENvbnRleHQgewogCiB9OwogCi1zdGF0
aWMgaW5saW5lIHZvaWQgYWRkU3R5bGVSZWxhdGlvbihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5n
Q29udGV4dCYgY2hlY2tpbmdDb250ZXh0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUgdHlwZSwgdW5zaWduZWQgdmFsdWUgPSAxKQor
c3RhdGljIGlubGluZSB2b2lkIGFkZFN0eWxlUmVsYXRpb24oU2VsZWN0b3JDaGVja2VyOjpDaGVj
a2luZ0NvbnRleHQmIGNoZWNraW5nQ29udGV4dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgU3R5
bGU6OlJlbGF0aW9uOjpUeXBlIHR5cGUsIHVuc2lnbmVkIHZhbHVlID0gMSkKIHsKLSAgICBBU1NF
UlQodmFsdWUgPT0gMSB8fCB0eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
TnRoQ2hpbGRJbmRleCB8fCB0eXBlID09IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0ZWRCeUVtcHR5KTsKKyAgICBBU1NFUlQodmFsdWUgPT0gMSB8fCB0eXBlID09IFN0eWxl
OjpSZWxhdGlvbjo6TnRoQ2hpbGRJbmRleCB8fCB0eXBlID09IFN0eWxlOjpSZWxhdGlvbjo6QWZm
ZWN0ZWRCeUVtcHR5KTsKICAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnJlc29sdmluZ01vZGUgIT0g
U2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNvbHZpbmdTdHlsZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIGNoZWNraW5nQ29udGV4dC5zdHlsZVJlbGF0aW9ucy5hcHBlbmQoeyBjb25zdF9jYXN0PEVs
ZW1lbnQmPihlbGVtZW50KSwgdHlwZSwgdmFsdWUgfSk7CisgICAgY2hlY2tpbmdDb250ZXh0LnN0
eWxlUmVsYXRpb25zLmFwcGVuZCh7IGVsZW1lbnQsIHR5cGUsIHZhbHVlIH0pOwogfQogCiBzdGF0
aWMgaW5saW5lIGJvb2wgaXNGaXJzdENoaWxkRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50
KQpAQCAtMTA1LDcgKzEwNSw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0xhc3RDaGlsZEVsZW1l
bnQoY28KIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0ZpcnN0T2ZUeXBlKFNlbGVjdG9yQ2hlY2tlcjo6
Q2hlY2tpbmdDb250ZXh0JiBjaGVja2luZ0NvbnRleHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFF1YWxpZmllZE5hbWUmIHR5cGUpCiB7CiAgICAgZm9yIChjb25zdCBFbGVtZW50KiBz
aWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJs
aW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5n
KSkgewotICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcs
IFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKKyAg
ICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpzaWJsaW5nLCBTdHlsZTo6
UmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAKICAgICAgICAgaWYgKHNpYmxpbmctPmhh
c1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjcsNyArMTI3
LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY291bnRFbGVtZW50c0JlZm9yZShTZQogICAgIGludCBj
b3VudCA9IDA7CiAgICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZl
cnNhbDo6cHJldmlvdXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVu
dFRyYXZlcnNhbDo6cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewogCi0gICAgICAgIGFkZFN0
eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqc2libGluZywgU2VsZWN0b3JDaGVja2VyOjpT
dHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4dFNpYmxpbmcpOworICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0c05l
eHRTaWJsaW5nKTsKIAogICAgICAgICB1bnNpZ25lZCBpbmRleCA9IHNpYmxpbmctPmNoaWxkSW5k
ZXgoKTsKICAgICAgICAgaWYgKGluZGV4KSB7CkBAIC0xNDMsNyArMTQzLDcgQEAgc3RhdGljIGlu
bGluZSBpbnQgY291bnRFbGVtZW50c09mVHlwZUJlZgogewogICAgIGludCBjb3VudCA9IDA7CiAg
ICAgZm9yIChjb25zdCBFbGVtZW50KiBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6cHJldmlv
dXNTaWJsaW5nKGVsZW1lbnQpOyBzaWJsaW5nOyBzaWJsaW5nID0gRWxlbWVudFRyYXZlcnNhbDo6
cHJldmlvdXNTaWJsaW5nKCpzaWJsaW5nKSkgewotICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNo
ZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0c05leHRTaWJsaW5nKTsKKyAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0Nv
bnRleHQsICpzaWJsaW5nLCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAK
ICAgICAgICAgaWYgKHNpYmxpbmctPmhhc1RhZ05hbWUodHlwZSkpCiAgICAgICAgICAgICArK2Nv
dW50OwpAQCAtMzI4LDEzICszMjgsMTMgQEAgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFJlc3VsdCBT
ZWxlY3RvckNoZQogCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29u
dGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsK
KyAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29udGV4dC5l
bGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCiAg
ICAgICAgICAgICBFbGVtZW50KiBwcmV2aW91c0VsZW1lbnQgPSBjb250ZXh0LmVsZW1lbnQtPnBy
ZXZpb3VzRWxlbWVudFNpYmxpbmcoKTsKICAgICAgICAgICAgIGlmICghcHJldmlvdXNFbGVtZW50
KQogICAgICAgICAgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbHMoTWF0Y2g6OlNlbGVj
dG9yRmFpbHNBbGxTaWJsaW5ncyk7CiAKLSAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hl
Y2tpbmdDb250ZXh0LCAqcHJldmlvdXNFbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpBZmZlY3RzTmV4
dFNpYmxpbmcpOworICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQs
ICpwcmV2aW91c0VsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsK
IAogICAgICAgICAgICAgbmV4dENvbnRleHQuZWxlbWVudCA9IHByZXZpb3VzRWxlbWVudDsKICAg
ICAgICAgICAgIG5leHRDb250ZXh0LmZpcnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENv
bnRleHQuc2VsZWN0b3I7CkBAIC0zNDksMTIgKzM0OSwxMiBAQCBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoUmVzdWx0IFNlbGVjdG9yQ2hlCiAgICAgICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OnVw
ZGF0ZVdpdGhNYXRjaFR5cGUocmVzdWx0LCBtYXRjaFR5cGUpOwogICAgICAgICB9CiAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDoKLSAgICAgICAgYWRkU3R5bGVSZWxhdGlv
bihjaGVja2luZ0NvbnRleHQsICpjb250ZXh0LmVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVj
dGVkQnlQcmV2aW91c1NpYmxpbmcpOworICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5n
Q29udGV4dCwgKmNvbnRleHQuZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJl
dmlvdXNTaWJsaW5nKTsKIAogICAgICAgICBuZXh0Q29udGV4dC5lbGVtZW50ID0gY29udGV4dC5l
bGVtZW50LT5wcmV2aW91c0VsZW1lbnRTaWJsaW5nKCk7CiAgICAgICAgIG5leHRDb250ZXh0LmZp
cnN0U2VsZWN0b3JPZlRoZUZyYWdtZW50ID0gbmV4dENvbnRleHQuc2VsZWN0b3I7CiAgICAgICAg
IGZvciAoOyBuZXh0Q29udGV4dC5lbGVtZW50OyBuZXh0Q29udGV4dC5lbGVtZW50ID0gbmV4dENv
bnRleHQuZWxlbWVudC0+cHJldmlvdXNFbGVtZW50U2libGluZygpKSB7Ci0gICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKm5leHRDb250ZXh0LmVsZW1lbnQsIFN0
eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CisgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKm5leHRDb250ZXh0LmVsZW1lbnQsIFN0eWxlOjpSZWxh
dGlvbjo6QWZmZWN0c05leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgUHNldWRvSWRTZXQgaWdu
b3JlRHluYW1pY1BzZXVkbzsKICAgICAgICAgICAgIHVuc2lnbmVkIGluZGlyZWN0QWRqYWNlbnRT
cGVjaWZpY2l0eSA9IDA7CkBAIC02ODIsNyArNjgyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6
OmNoZWNrT25lKENoZWNraW5nQwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFkZFN0eWxl
UmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqY29udGV4dC5lbGVtZW50LCBTdHlsZVJlbGF0aW9u
OjpBZmZlY3RlZEJ5RW1wdHksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxh
dGlvbihjaGVja2luZ0NvbnRleHQsICpjb250ZXh0LmVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6
QWZmZWN0ZWRCeUVtcHR5LCByZXN1bHQpOwogCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgICAgIH0KQEAgLTY5MSwxNSArNjkxLDE1IEBAIGJvb2wgU2VsZWN0b3JDaGVj
a2VyOjpjaGVja09uZShDaGVja2luZ0MKICAgICAgICAgICAgIGlmIChjb25zdCBFbGVtZW50KiBw
YXJlbnRFbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAg
ICBib29sIGlzRmlyc3RDaGlsZCA9IGlzRmlyc3RDaGlsZEVsZW1lbnQoZWxlbWVudCk7CiAgICAg
ICAgICAgICAgICAgaWYgKGlzRmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICAgICAgYWRkU3R5
bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkZpcnN0
Q2hpbGQpOwotICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0
LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RD
aGlsZFJ1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2lu
Z0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgICAg
ICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50
LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGlzRmlyc3RDaGlsZDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0ZpcnN0
T2ZUeXBlOgogICAgICAgICAgICAgLy8gZmlyc3Qtb2YtdHlwZSBtYXRjaGVzIHRoZSBmaXJzdCBl
bGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50
KCkpIHsKLSAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
ZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0
eWxlOjpSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBlbGVtZW50
LnRhZ1FOYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC03MDgs
MTUgKzcwOCwxNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAg
ICAgICAgICAgICBpZiAoY29uc3QgRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFy
ZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgYm9vbCBpc0xhc3RDaGlsZCA9IHBhcmVu
dEVsZW1lbnQtPmlzRmluaXNoZWRQYXJzaW5nQ2hpbGRyZW4oKSAmJiBpc0xhc3RDaGlsZEVsZW1l
bnQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgaWYgKGlzTGFzdENoaWxkKQotICAgICAgICAg
ICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5
bGVSZWxhdGlvbjo6TGFzdENoaWxkKTsKLSAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9u
KGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkNoaWxkcmVu
QWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6TGFzdENo
aWxkKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
KnBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENo
aWxkUnVsZXMpOwogICAgICAgICAgICAgICAgIHJldHVybiBpc0xhc3RDaGlsZDsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc0xhc3RPZlR5cGU6CiAgICAgICAgICAgICAvLyBsYXN0LW9mLXR5cGUgbWF0Y2hlcyB0
aGUgbGFzdCBlbGVtZW50IG9mIGl0cyB0eXBlCiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFy
ZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAg
YWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZVJl
bGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CisgICAg
ICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRFbGVt
ZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25h
bFJ1bGVzKTsKICAgICAgICAgICAgICAgICBpZiAoIXBhcmVudEVsZW1lbnQtPmlzRmluaXNoZWRQ
YXJzaW5nQ2hpbGRyZW4oKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgICAgICAgICAgIHJldHVybiBpc0xhc3RPZlR5cGUoZWxlbWVudCwgZWxlbWVudC50YWdRTmFt
ZSgpKTsKQEAgLTcyNiwyMCArNzI2LDIwIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09u
ZShDaGVja2luZ0MKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxl
bWVudC5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgICAgICBib29sIGZpcnN0Q2hpbGQg
PSBpc0ZpcnN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJvb2wgb25s
eUNoaWxkID0gZmlyc3RDaGlsZCAmJiBwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0No
aWxkcmVuKCkgJiYgaXNMYXN0Q2hpbGRFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgICAg
IGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKLSAgICAgICAgICAg
ICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0
eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzKTsKKyAgICAgICAg
ICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQs
IFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKKyAg
ICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVs
ZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXMp
OwogICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkKQotICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6
Rmlyc3RDaGlsZCk7CisgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tp
bmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkZpcnN0Q2hpbGQpOwogICAgICAg
ICAgICAgICAgIGlmIChvbmx5Q2hpbGQpCi0gICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVs
YXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpMYXN0Q2hpbGQp
OworICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwg
ZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpMYXN0Q2hpbGQpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBvbmx5Q2hpbGQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NPbmx5T2ZUeXBlOgogICAgICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgc2VsZWN0b3IgaXMgdmVyeSBzbG93LgogICAgICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQoKSkgewotICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHls
ZVJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKLSAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlUmVs
YXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKKyAgICAg
ICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5
bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgICAgICAg
ICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxl
OjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwog
ICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxlbWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGls
ZHJlbigpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGlzRmlyc3RPZlR5cGUoY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBlbGVtZW50
LnRhZ1FOYW1lKCkpICYmIGlzTGFzdE9mVHlwZShlbGVtZW50LCBlbGVtZW50LnRhZ1FOYW1lKCkp
OwpAQCAtNzc4LDcgKzc3OCw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShDaGVj
a2luZ0MKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NQbGFjZWhvbGRlclNob3duOgogICAgICAgICAgICAgaWYgKGlzPEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50PihlbGVtZW50KSkgewotICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24o
Y2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZVJlbGF0aW9uOjpVbmlxdWUpOworICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHls
ZTo6UmVsYXRpb246OlVuaXF1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50PihlbGVtZW50KS5pc1BsYWNlaG9sZGVyVmlzaWJsZSgp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzkzLDEyICs3
OTMsMTIgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lKENoZWNraW5nQwogICAgICAg
ICAgICAgICAgICAgICBzcGVjaWZpY2l0eSA9IENTU1NlbGVjdG9yOjphZGRTcGVjaWZpY2l0aWVz
KHNwZWNpZmljaXR5LCBzZWxlY3Rvckxpc3RTcGVjaWZpY2l0eSk7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVs
ZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOworICAgICAg
ICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHls
ZTo6UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcpOwogCiAgICAgICAgICAgICAg
ICAgaW50IGNvdW50ID0gMTsKICAgICAgICAgICAgICAgICBpZiAoY29uc3QgQ1NTU2VsZWN0b3JM
aXN0KiBzZWxlY3Rvckxpc3QgPSBzZWxlY3Rvci5zZWxlY3Rvckxpc3QoKSkgewogICAgICAgICAg
ICAgICAgICAgICBmb3IgKEVsZW1lbnQqIHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2
aW91c1NpYmxpbmcoZWxlbWVudCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91c1NpYmxpbmcoKnNpYmxpbmcpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlUmVsYXRpb246
OkFmZmVjdHNOZXh0U2libGluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnNpYmxpbmcsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0
c05leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaWdub3Jl
ZFNwZWNpZmljaXR5OwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoU2VsZWN0b3JM
aXN0KGNoZWNraW5nQ29udGV4dCwgY29udGV4dCwgKnNpYmxpbmcsICpzZWxlY3Rvckxpc3QsIGln
bm9yZWRTcGVjaWZpY2l0eSkpCkBAIC04MDYsNyArODA2LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lKENoZWNraW5nQwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgY291bnQgKz0gY291bnRFbGVtZW50
c0JlZm9yZShjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6
TnRoQ2hpbGRJbmRleCwgY291bnQpOworICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpOdGhDaGlsZElu
ZGV4LCBjb3VudCk7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKHNl
bGVjdG9yLm1hdGNoTnRoKGNvdW50KSkKQEAgLTgxOCw3ICs4MTgsNyBAQCBib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIGlmIChlbGVtZW50LnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAg
IGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50LCBTdHlsZVJlbGF0aW9u
OjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3Rl
ZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDEgKyBj
b3VudEVsZW1lbnRzT2ZUeXBlQmVmb3JlKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgZWxlbWVu
dC50YWdRTmFtZSgpKTsKICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3IubWF0Y2hOdGgoY291
bnQpKQpAQCAtODM1LDkgKzgzNSw5IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZShD
aGVja2luZ0MKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgICAgICAgICAgc3BlY2lmaWNpdHkgPSBDU1NTZWxlY3Rvcjo6YWRkU3BlY2lmaWNpdGllcyhz
cGVjaWZpY2l0eSwgc2VsZWN0b3JMaXN0U3BlY2lmaWNpdHkpOwogCi0gICAgICAgICAgICAgICAg
ICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVydHlCYXNlZEJhY2t3YXJkUG9zaXRp
b25hbFJ1bGVzKTsKKyAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2lu
Z0NvbnRleHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0
ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcyk7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdD
b250ZXh0LCAqcGFyZW50RWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOworICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJl
bGF0aW9uKGNoZWNraW5nQ29udGV4dCwgKnBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6
Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwogCiAgICAgICAgICAg
ICAgICAgaWYgKCFwYXJlbnRFbGVtZW50LT5pc0ZpbmlzaGVkUGFyc2luZ0NoaWxkcmVuKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTg2MCw3ICs4NjAsNyBAQCBib29s
IFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAgICAgICAgICAgICBpZiAoIXNl
bGVjdG9yLnBhcnNlTnRoKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBp
ZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCgpKSB7Ci0g
ICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsICpwYXJlbnRF
bGVtZW50LCBTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9u
YWxSdWxlcyk7CisgICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRl
eHQsICpwYXJlbnRFbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUJh
Y2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAogICAgICAgICAgICAgICAgIGlmICghcGFyZW50RWxl
bWVudC0+aXNGaW5pc2hlZFBhcnNpbmdDaGlsZHJlbigpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC05MDIsNyArOTAyLDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKENoZWNraW5nQwogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIHJldHVybiBlbGVtZW50LmlzTGluaygpICYmIGNvbnRleHQudmlzaXRlZE1hdGNoVHlwZSA9
PSBWaXNpdGVkTWF0Y2hUeXBlOjpFbmFibGVkOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0RyYWc6Ci0gICAgICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29u
dGV4dCwgZWxlbWVudCwgU3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeURyYWcpOworICAgICAgICAg
ICAgYWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlOjpSZWxh
dGlvbjo6QWZmZWN0ZWRCeURyYWcpOwogCiAgICAgICAgICAgICBpZiAoZWxlbWVudC5yZW5kZXJl
cigpICYmIGVsZW1lbnQucmVuZGVyZXIoKS0+aXNEcmFnZ2luZygpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtOTExLDcgKzkxMSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZShDaGVja2luZ0MKICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzRm9jdXNQc2V1ZG9D
bGFzcyhlbGVtZW50KTsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3Zl
cjoKICAgICAgICAgICAgIGlmIChtX3N0cmljdFBhcnNpbmcgfHwgZWxlbWVudC5pc0xpbmsoKSB8
fCBjYW5NYXRjaEhvdmVyT3JBY3RpdmVJblF1aXJrc01vZGUoY29udGV4dCkpIHsKLSAgICAgICAg
ICAgICAgICBhZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGVS
ZWxhdGlvbjo6QWZmZWN0ZWRCeUhvdmVyKTsKKyAgICAgICAgICAgICAgICBhZGRTdHlsZVJlbGF0
aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5
SG92ZXIpOwogCiAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaG92ZXJlZCgpIHx8IEluc3Bl
Y3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShjb25zdF9jYXN0PEVsZW1lbnQm
PihlbGVtZW50KSwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXIpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkxOSw3ICs5MTksNyBAQCBib29sIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tPbmUoQ2hlY2tpbmdDCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBY3RpdmU6CiAgICAgICAgICAgICBpZiAobV9zdHJp
Y3RQYXJzaW5nIHx8IGVsZW1lbnQuaXNMaW5rKCkgfHwgY2FuTWF0Y2hIb3Zlck9yQWN0aXZlSW5R
dWlya3NNb2RlKGNvbnRleHQpKSB7Ci0gICAgICAgICAgICAgICAgYWRkU3R5bGVSZWxhdGlvbihj
aGVja2luZ0NvbnRleHQsIGVsZW1lbnQsIFN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmUp
OworICAgICAgICAgICAgICAgIGFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVt
ZW50LCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmUpOwogCiAgICAgICAgICAgICAg
ICAgaWYgKGVsZW1lbnQuYWN0aXZlKCkgfHwgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3Jj
ZVBzZXVkb1N0YXRlKGNvbnN0X2Nhc3Q8RWxlbWVudCY+KGVsZW1lbnQpLCBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NBY3RpdmUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmgJKHJldmlzaW9uIDE5NzYzNikKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNwYWNlU3BsaXRTdHJpbmcuaCIKKyNpbmNsdWRlICJTdHlsZVJlbGF0
aW9ucy5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgogCkBAIC03NiwyOSArNzcsNiBAQCBwdWJsaWM6CiAKICAgICBTZWxlY3RvckNoZWNrZXIoRG9j
dW1lbnQmKTsKIAotICAgIHN0cnVjdCBTdHlsZVJlbGF0aW9uIHsKLSAgICAgICAgZW51bSBUeXBl
IHsKLSAgICAgICAgICAgIEFmZmVjdGVkQnlBY3RpdmUsCi0gICAgICAgICAgICBBZmZlY3RlZEJ5
RHJhZywKLSAgICAgICAgICAgIEFmZmVjdGVkQnlFbXB0eSwKLSAgICAgICAgICAgIEFmZmVjdGVk
QnlIb3ZlciwKLSAgICAgICAgICAgIEFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcsCi0gICAgICAg
ICAgICBBZmZlY3RzTmV4dFNpYmxpbmcsCi0gICAgICAgICAgICBDaGlsZHJlbkFmZmVjdGVkQnlC
YWNrd2FyZFBvc2l0aW9uYWxSdWxlcywKLSAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeUZp
cnN0Q2hpbGRSdWxlcywKLSAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFz
ZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcywKLSAgICAgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRC
eUxhc3RDaGlsZFJ1bGVzLAotICAgICAgICAgICAgRmlyc3RDaGlsZCwKLSAgICAgICAgICAgIExh
c3RDaGlsZCwKLSAgICAgICAgICAgIE50aENoaWxkSW5kZXgsCi0gICAgICAgICAgICBVbmlxdWUs
Ci0gICAgICAgIH07Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQ7Ci0gICAgICAgIFR5cGUgdHlw
ZTsKLSAgICAgICAgdW5zaWduZWQgdmFsdWU7Ci0gICAgfTsKLSAgICB1c2luZyBTdHlsZVJlbGF0
aW9ucyA9IFZlY3RvcjxTdHlsZVJlbGF0aW9uLCA4PjsKLQogICAgIHN0cnVjdCBDaGVja2luZ0Nv
bnRleHQgewogICAgICAgICBDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlIHJl
c29sdmluZ01vZGUpCiAgICAgICAgICAgICA6IHJlc29sdmluZ01vZGUocmVzb2x2aW5nTW9kZSkK
QEAgLTExMSw3ICs4OSw3IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgQ29udGFpbmVyTm9kZSog
c2NvcGUgeyBudWxscHRyIH07CiAKICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIG5pY2Vy
IHRvIGhhdmUgYSBzZXBhcmF0ZSBvYmplY3QgZm9yIHJldHVybiB2YWx1ZXMuIFRoaXMgcmVxdWly
ZXMgc29tZSBtb3JlIHdvcmsgaW4gdGhlIHNlbGVjdG9yIGNvbXBpbGVyLgotICAgICAgICBTdHls
ZVJlbGF0aW9ucyBzdHlsZVJlbGF0aW9uczsKKyAgICAgICAgU3R5bGU6OlJlbGF0aW9ucyBzdHls
ZVJlbGF0aW9uczsKICAgICAgICAgUHNldWRvSWRTZXQgcHNldWRvSURTZXQ7CiAgICAgfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAkocmV2aXNpb24gMTk3NjM2KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMyAr
NjEsMTMgQEAgYm9vbCBTdHlsZU1lZGlhOjptYXRjaE1lZGl1bShjb25zdCBTdHJpbgogICAgIGlm
ICghZG9jdW1lbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBSZWZQdHI8
UmVuZGVyU3R5bGU+IHJvb3RTdHlsZSA9IGRvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29sdmVyKCku
c3R5bGVGb3JFbGVtZW50KCpkb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LT5yZW5kZXJTdHlsZSgp
LCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyk7CisgICAgYXV0byByb290U3R5bGUgPSBkb2N1bWVu
dC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50
LCBkb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRl
clN0eWxlOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNl
dDo6Y3JlYXRlKCk7CiAgICAgaWYgKCFtZWRpYS0+cGFyc2UocXVlcnkpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwodHlwZSgpLCBt
X2ZyYW1lLCByb290U3R5bGUuZ2V0KCkpOworICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Igc2NyZWVu
RXZhbCh0eXBlKCksIG1fZnJhbWUsIHJvb3RTdHlsZS5wdHIoKSk7CiAgICAgcmV0dXJuIHNjcmVl
bkV2YWwuZXZhbChtZWRpYS5nZXQoKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY3LDcgKzI2Nyw3IEBAIFN0eWxlUmVz
b2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGQKICAgICAgICAgbV9tZWRpdW0gPSBzdGQ6
Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnlFdmFsdWF0b3I+KCJhbGwiKTsKIAogICAgIGlmIChyb290
KQotICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKnJvb3QsIG1f
ZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpOworICAgICAg
ICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVsZW1lbnQoKnJvb3QsIG1fZG9jdW1lbnQu
cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRlclN0eWxlOwogCiAg
ICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9IHN0
ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeUV2YWx1YXRvcj4odmlldy0+bWVkaWFUeXBlKCksICZ2
aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpOwpAQCAtMzcxLDcgKzM3MSw3
IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0F0U2hhZG93Qm91bmRhcnkoY28KICAgICByZXR1cm4g
cGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLT5pc1NoYWRvd1Jvb3QoKTsKIH0KIAotUmVmPFJlbmRl
clN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlLCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0Jl
aGF2aW9yLCBjb25zdCBSZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVj
dG9yRmlsdGVyKiBzZWxlY3RvckZpbHRlcikKK0VsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxl
LCBSdWxlTWF0Y2hpbmdCZWhhdmlvciBtYXRjaGluZ0JlaGF2aW9yLCBjb25zdCBSZW5kZXJSZWdp
b24qIHJlZ2lvbkZvclN0eWxpbmcsIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRl
cikKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghbV9pbkxvYWRQZW5kaW5nSW1hZ2VzKTsKIApAQCAt
Mzg2LDIwICszODYsMjIgQEAgUmVmPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZv
cgogICAgICAgICBzdGF0ZS5zZXRQYXJlbnRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmUoc3RhdGUu
c3R5bGUoKSkpOwogICAgIH0KIAorICAgIGF1dG8mIHN0eWxlID0gKnN0YXRlLnN0eWxlKCk7CisK
ICAgICBpZiAoZWxlbWVudC5pc0xpbmsoKSkgewotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJ
c0xpbmsodHJ1ZSk7CisgICAgICAgIHN0eWxlLnNldElzTGluayh0cnVlKTsKICAgICAgICAgRUlu
c2lkZUxpbmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpOwogICAgICAgICBp
ZiAobGlua1N0YXRlICE9IE5vdEluc2lkZUxpbmspIHsKICAgICAgICAgICAgIGJvb2wgZm9yY2VW
aXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1l
bnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQpOwogICAgICAgICAgICAgaWYgKGZv
cmNlVmlzaXRlZCkKICAgICAgICAgICAgICAgICBsaW5rU3RhdGUgPSBJbnNpZGVWaXNpdGVkTGlu
azsKICAgICAgICAgfQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRJbnNpZGVMaW5rKGxpbmtT
dGF0ZSk7CisgICAgICAgIHN0eWxlLnNldEluc2lkZUxpbmsobGlua1N0YXRlKTsKICAgICB9CiAK
ICAgICBDU1NEZWZhdWx0U3R5bGVTaGVldHM6OmVuc3VyZURlZmF1bHRTdHlsZVNoZWV0c0ZvckVs
ZW1lbnQoZWxlbWVudCk7CiAKLSAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxl
bWVudCwgc3RhdGUuc3R5bGUoKSwgbV9ydWxlU2V0cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigp
KTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0
cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKICAgICBjb2xsZWN0b3Iuc2V0UmVnaW9uRm9y
U3R5bGluZyhyZWdpb25Gb3JTdHlsaW5nKTsKICAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKG1fbWVk
aXVtLmdldCgpKTsKIApAQCAtNDA4LDYgKzQxMCwxNSBAQCBSZWY8UmVuZGVyU3R5bGU+IFN0eWxl
UmVzb2x2ZXI6OnN0eWxlRm9yCiAgICAgZWxzZQogICAgICAgICBjb2xsZWN0b3IubWF0Y2hBbGxS
dWxlcyhtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcywgbWF0Y2hpbmdCZWhhdmlvciAhPSBNYXRj
aEFsbFJ1bGVzRXhjbHVkaW5nU01JTCk7CiAKKyAgICBpZiAoY29sbGVjdG9yLm1hdGNoZWRQc2V1
ZG9FbGVtZW50SWRzKCkpCisgICAgICAgIHN0eWxlLnNldEhhc1BzZXVkb1N0eWxlcyhjb2xsZWN0
b3IubWF0Y2hlZFBzZXVkb0VsZW1lbnRJZHMoKSk7CisKKyAgICAvLyBUaGlzIGlzIHJlcXVpcmVk
IGZvciBzdHlsZSBzaGFyaW5nLgorICAgIGlmIChjb2xsZWN0b3IuZGlkTWF0Y2hVbmNvbW1vbkF0
dHJpYnV0ZVNlbGVjdG9yKCkpCisgICAgICAgIHN0eWxlLnNldFVuaXF1ZSgpOworCisgICAgYXV0
byBlbGVtZW50U3R5bGVSZWxhdGlvbnMgPSBTdHlsZTo6Y29tbWl0UmVsYXRpb25zVG9SZW5kZXJT
dHlsZShzdHlsZSwgZWxlbWVudCwgY29sbGVjdG9yLnN0eWxlUmVsYXRpb25zKCkpOworCiAgICAg
YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLCBlbGVtZW50
KTsKIAogICAgIC8vIENsZWFuIHVwIG91ciBzdHlsZSBvYmplY3QncyBkaXNwbGF5IGFuZCB0ZXh0
IGRlY29yYXRpb25zIChhbW9uZyBvdGhlciBmaXh1cHMpLgpAQCAtNDE4LDggKzQyOSw3IEBAIFJl
ZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3IKIAogICAgIHN0YXRlLmNsZWFy
KCk7IC8vIENsZWFyIG91dCBmb3IgdGhlIG5leHQgcmVzb2x2ZS4KIAotICAgIC8vIE5vdyByZXR1
cm4gdGhlIHN0eWxlLgotICAgIHJldHVybiBzdGF0ZS50YWtlU3R5bGUoKTsKKyAgICByZXR1cm4g
eyBzdGF0ZS50YWtlU3R5bGUoKSwgV1RGTW92ZShlbGVtZW50U3R5bGVSZWxhdGlvbnMpIH07CiB9
CiAKIFJlZjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25z
dCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBjb25zdCBTdHlsZUtleWZyYW1lKiBrZXlmcmFt
ZSwgS2V5ZnJhbWVWYWx1ZSYga2V5ZnJhbWVWYWx1ZSkKQEAgLTU1OCw3ICs1NjgsNyBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwCiAgICAgLy8gdGhvc2UgcnVsZXMu
CiAKICAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1bGVzLgotICAgIEVsZW1lbnRS
dWxlQ29sbGVjdG9yIGNvbGxlY3RvcihlbGVtZW50LCBtX3N0YXRlLnN0eWxlKCksIG1fcnVsZVNl
dHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CisgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3Ig
Y29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7
CiAgICAgY29sbGVjdG9yLnNldFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG9TdHlsZVJlcXVlc3Qp
OwogICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0obV9tZWRpdW0uZ2V0KCkpOwogICAgIGNvbGxlY3Rv
ci5tYXRjaFVBUnVsZXMoKTsKQEAgLTU2OCw2ICs1NzgsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBTdHlsZVJlc29sdmVyOjpwCiAgICAgICAgIGNvbGxlY3Rvci5tYXRjaEF1dGhvclJ1bGVz
KGZhbHNlKTsKICAgICB9CiAKKyAgICBBU1NFUlQoIWNvbGxlY3Rvci5tYXRjaGVkUHNldWRvRWxl
bWVudElkcygpKTsKKwogICAgIGlmIChjb2xsZWN0b3IubWF0Y2hlZFJlc3VsdCgpLm1hdGNoZWRQ
cm9wZXJ0aWVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA0
MCw3ICsxMDUyLDcgQEAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOgog
CiAgICAgbV9zdGF0ZSA9IFN0YXRlKCplbGVtZW50LCBudWxscHRyKTsKIAotICAgIEVsZW1lbnRS
dWxlQ29sbGVjdG9yIGNvbGxlY3RvcigqZWxlbWVudCwgbnVsbHB0ciwgbV9ydWxlU2V0cywgbV9z
dGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0
b3IoKmVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CiAgICAg
Y29sbGVjdG9yLnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMp
OwogICAgIGNvbGxlY3Rvci5zZXRQc2V1ZG9TdHlsZVJlcXVlc3QoUHNldWRvU3R5bGVSZXF1ZXN0
KHBzZXVkb0lkKSk7CiAgICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlICJTY3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlNlbGVjdG9yQ2hl
Y2tlci5oIgogI2luY2x1ZGUgIlN0eWxlSW5oZXJpdGVkRGF0YS5oIgorI2luY2x1ZGUgIlN0eWxl
UmVsYXRpb25zLmgiCiAjaW5jbHVkZSAiVmlld3BvcnRTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVk
ZSA8Yml0c2V0PgogI2luY2x1ZGUgPG1lbW9yeT4KQEAgLTEyMyw2ICsxMjQsMTYgQEAgcHVibGlj
OgogICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFyOwogfTsKIAorc3RydWN0IEVsZW1lbnRT
dHlsZSB7CisgICAgRWxlbWVudFN0eWxlKFJlZjxSZW5kZXJTdHlsZT4mJiByZW5kZXJTdHlsZSwg
c3RkOjp1bmlxdWVfcHRyPFN0eWxlOjpSZWxhdGlvbnM+IHJlbGF0aW9ucyA9IHsgfSkKKyAgICAg
ICAgOiByZW5kZXJTdHlsZShXVEZNb3ZlKHJlbmRlclN0eWxlKSkKKyAgICAgICAgLCByZWxhdGlv
bnMoV1RGTW92ZShyZWxhdGlvbnMpKQorICAgIHsgfQorCisgICAgUmVmPFJlbmRlclN0eWxlPiBy
ZW5kZXJTdHlsZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3R5bGU6OlJlbGF0aW9ucz4gcmVsYXRp
b25zOworfTsKKwogLy8gVGhpcyBjbGFzcyBzZWxlY3RzIGEgUmVuZGVyU3R5bGUgZm9yIGEgZ2l2
ZW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbGxlY3Rpb24gb2Ygc3R5bGVzaGVldHMuCiBjbGFzcyBT
dHlsZVJlc29sdmVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdHlsZVJlc29sdmVyKTsg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CkBAIC0xMzAsNyArMTQxLDcgQEAgcHVibGljOgogICAg
IFN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmKTsKICAgICB+U3R5bGVSZXNvbHZlcigpOwogCi0gICAg
UmVmPFJlbmRlclN0eWxlPiBzdHlsZUZvckVsZW1lbnQoRWxlbWVudCYsIFJlbmRlclN0eWxlKiBw
YXJlbnRTdHlsZSwgUnVsZU1hdGNoaW5nQmVoYXZpb3IgPSBNYXRjaEFsbFJ1bGVzLCBjb25zdCBS
ZW5kZXJSZWdpb24qIHJlZ2lvbkZvclN0eWxpbmcgPSBudWxscHRyLCBjb25zdCBTZWxlY3RvckZp
bHRlciogPSBudWxscHRyKTsKKyAgICBFbGVtZW50U3R5bGUgc3R5bGVGb3JFbGVtZW50KEVsZW1l
bnQmLCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUsIFJ1bGVNYXRjaGluZ0JlaGF2aW9yID0gTWF0
Y2hBbGxSdWxlcywgY29uc3QgUmVuZGVyUmVnaW9uKiByZWdpb25Gb3JTdHlsaW5nID0gbnVsbHB0
ciwgY29uc3QgU2VsZWN0b3JGaWx0ZXIqID0gbnVsbHB0cik7CiAKICAgICB2b2lkIGtleWZyYW1l
U3R5bGVzRm9yQW5pbWF0aW9uKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSosIEtleWZyYW1l
TGlzdCYpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
Y3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JD
b21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJT
VkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIgog
I2luY2x1ZGUgIlN0YWNrQWxsb2NhdG9yLmgiCisjaW5jbHVkZSAiU3R5bGVSZWxhdGlvbnMuaCIK
ICNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvR1BS
SW5mby5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0xpbmtCdWZmZXIuaD4KQEAgLTMyMyw4
ICszMjQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNUYXJnZXQoQXNz
ZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKIAogICAgIC8vIEhlbHBlcnMuCi0gICAg
dm9pZCBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKEFzc2VtYmxlcjo6
UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUs
IE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUgPSB7IH0pOwotICAgIHZvaWQg
Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0Nv
bnRleHQsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0
eWxlUmVsYXRpb246OlR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUg
PSB7IH0pOworICAgIHZvaWQgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHls
ZShBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpUeXBlLCBP
cHRpb25hbDxBc3NlbWJsZXI6OlJlZ2lzdGVySUQ+IHZhbHVlID0geyB9KTsKKyAgICB2b2lkIGdl
bmVyYXRlQWRkU3R5bGVSZWxhdGlvbihBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250
ZXh0LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpUeXBl
LCBPcHRpb25hbDxBc3NlbWJsZXI6OlJlZ2lzdGVySUQ+IHZhbHVlID0geyB9KTsKICAgICBBc3Nl
bWJsZXI6Okp1bXAgYnJhbmNoT25SZXNvbHZpbmdNb2RlV2l0aENoZWNraW5nQ29udGV4dChBc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZSwgQXNzZW1i
bGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7CiAgICAgQXNzZW1ibGVyOjpKdW1wIGJy
YW5jaE9uUmVzb2x2aW5nTW9kZShBc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIFNlbGVj
dG9yQ2hlY2tlcjo6TW9kZSwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCk7
CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc0ZpcnN0TGluayhBc3NlbWJsZXI6Okp1bXBMaXN0
JiBmYWlsdXJlQ2FzZXMsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVtZW50KTsKQEAgLTE4OTEs
NyArMTg5Miw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGUKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGlmIChzaG91bGRNYXJrU3R5bGVJ
c0FmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmcoZnJhZ21lbnQpKQotICAgICAgICAgICAgZ2VuZXJh
dGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVy
LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxp
bmcpOworICAgICAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHls
ZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlQcmV2
aW91c1NpYmxpbmcpOwogICAgICAgICBnZW5lcmF0ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQo
ZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CiAgICAgfQogCkBAIC0yMTM1LDcgKzIxMzYsNyBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVXYWxrCiB2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVEaXJlY3RBZGphY2VudFRyZWVXYWxrZXIoQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCkK
IHsKICAgICBnZW5lcmF0ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnQoZmFpbHVyZUNhc2VzLCBmcmFn
bWVudCk7Ci0gICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVt
ZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVj
dHNOZXh0U2libGluZyk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uSWZSZXNvbHZpbmdT
dHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdHNOZXh0
U2libGluZyk7CiAKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nVGFnTmFtZUZhaWx1
cmVDYXNlczsKICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG1hdGNoaW5nUG9zdFRhZ05hbWVGYWls
dXJlQ2FzZXM7CkBAIC0yMTYwLDcgKzIxNjEsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6Z2VuZXJhdGVJbmRpCiAgICAgICAgIG1fYmFja3RyYWNraW5nTGV2ZWxzLmxhc3QoKS5pbmRp
cmVjdEFkamFjZW50VHJlZVdhbGtlckJhY2t0cmFja2luZ1BvaW50ID0gbV9hc3NlbWJsZXIubGFi
ZWwoKTsKIAogICAgIGdlbmVyYXRlV2Fsa1RvUHJldmlvdXNBZGphY2VudChmYWlsdXJlQ2FzZXMs
IGZyYWdtZW50KTsKLSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxl
KGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0c05leHRTaWJsaW5nKTsKKyAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29s
dmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFN0eWxlOjpSZWxhdGlvbjo6QWZmZWN0
c05leHRTaWJsaW5nKTsKIAogICAgIGlmIChmcmFnbWVudC5iYWNrdHJhY2tpbmdGbGFncyAmIEJh
Y2t0cmFja2luZ0ZsYWc6OkluZGlyZWN0QWRqYWNlbnRFbnRyeVBvaW50KQogICAgICAgICBtX2Jh
Y2t0cmFja2luZ0xldmVscy5sYXN0KCkuaW5kaXJlY3RBZGphY2VudEVudHJ5UG9pbnQgPSBtX2Fz
c2VtYmxlci5sYWJlbCgpOwpAQCAtMjE3MCw3ICsyMTcxLDcgQEAgdm9pZCBTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlSW5kaQogICAgIGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtUbyhsb29w
U3RhcnQsICZtX2Fzc2VtYmxlcik7CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKEFzc2VtYmxlcjo6UmVnaXN0
ZXJJRCBlbGVtZW50LCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OlR5cGUgcmVsYXRp
b25UeXBlLCBPcHRpb25hbDxBc3NlbWJsZXI6OlJlZ2lzdGVySUQ+IHZhbHVlKQordm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5
bGUoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6VHlwZSBy
ZWxhdGlvblR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUpCiB7CiAg
ICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3Rv
cikKICAgICAgICAgcmV0dXJuOwpAQCAtMjE4NSwxMCArMjE4NiwxMCBAQCB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVBZGRTCiAKIHN0YXRpYyB2b2lkIGFkZFN0eWxlUmVsYXRp
b25GdW5jdGlvbihTZWxlY3RvckNoZWNrZXI6OkNoZWNraW5nQ29udGV4dCogY2hlY2tpbmdDb250
ZXh0LCBFbGVtZW50KiBlbGVtZW50KQogewotICAgIGNoZWNraW5nQ29udGV4dC0+c3R5bGVSZWxh
dGlvbnMuYXBwZW5kKHsgKmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6
QWZmZWN0ZWRCeUFjdGl2ZSwgMSB9KTsKKyAgICBjaGVja2luZ0NvbnRleHQtPnN0eWxlUmVsYXRp
b25zLmFwcGVuZCh7ICplbGVtZW50LCBTdHlsZTo6UmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmUs
IDEgfSk7CiB9CiAKLXZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFkZFN0eWxl
UmVsYXRpb24oQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCwgQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VHlw
ZSByZWxhdGlvblR5cGUsIE9wdGlvbmFsPEFzc2VtYmxlcjo6UmVnaXN0ZXJJRD4gdmFsdWUpCit2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBl
bGVtZW50LCBTdHlsZTo6UmVsYXRpb246OlR5cGUgcmVsYXRpb25UeXBlLCBPcHRpb25hbDxBc3Nl
bWJsZXI6OlJlZ2lzdGVySUQ+IHZhbHVlKQogewogICAgIEFTU0VSVChtX3NlbGVjdG9yQ29udGV4
dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpOwogCkBAIC0yMTk5LDIwICsyMjAw
LDIwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUFkZFMKICAgICBmdW5j
dGlvbkNhbGwuY2FsbCgpOwogCiAgICAgQXNzZW1ibGVyOjpBZGRyZXNzIHZlY3RvckFkZHJlc3Mo
Y2hlY2tpbmdDb250ZXh0LCBPQkpFQ1RfT0ZGU0VUT0YoU2VsZWN0b3JDaGVja2VyOjpDaGVja2lu
Z0NvbnRleHQsIHN0eWxlUmVsYXRpb25zKSk7Ci0gICAgYXV0byBkYXRhQWRkcmVzcyA9IHZlY3Rv
ckFkZHJlc3Mud2l0aE9mZnNldChTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb25zOjpkYXRh
TWVtb3J5T2Zmc2V0KCkpOwotICAgIGF1dG8gc2l6ZUFkZHJlc3MgPSB2ZWN0b3JBZGRyZXNzLndp
dGhPZmZzZXQoU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uczo6c2l6ZU1lbW9yeU9mZnNl
dCgpKTsKKyAgICBhdXRvIGRhdGFBZGRyZXNzID0gdmVjdG9yQWRkcmVzcy53aXRoT2Zmc2V0KFN0
eWxlOjpSZWxhdGlvbnM6OmRhdGFNZW1vcnlPZmZzZXQoKSk7CisgICAgYXV0byBzaXplQWRkcmVz
cyA9IHZlY3RvckFkZHJlc3Mud2l0aE9mZnNldChTdHlsZTo6UmVsYXRpb25zOjpzaXplTWVtb3J5
T2Zmc2V0KCkpOwogCiAgICAgTG9jYWxSZWdpc3RlciByZWxhdGlvblBvaW50ZXIobV9yZWdpc3Rl
ckFsbG9jYXRvcik7CiAgICAgbV9hc3NlbWJsZXIubG9hZDMyKHNpemVBZGRyZXNzLCByZWxhdGlv
blBvaW50ZXIpOwogICAgIG1fYXNzZW1ibGVyLnN1YjMyKEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KDEpLCByZWxhdGlvblBvaW50ZXIpOwotICAgIG1fYXNzZW1ibGVyLm11bDMyKEFzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKHNpemVvZihTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb24pKSwgcmVs
YXRpb25Qb2ludGVyLCByZWxhdGlvblBvaW50ZXIpOworICAgIG1fYXNzZW1ibGVyLm11bDMyKEFz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHNpemVvZihTdHlsZTo6UmVsYXRpb24pKSwgcmVsYXRpb25Q
b2ludGVyLCByZWxhdGlvblBvaW50ZXIpOwogICAgIG1fYXNzZW1ibGVyLmFkZFB0cihkYXRhQWRk
cmVzcywgcmVsYXRpb25Qb2ludGVyKTsKIAotICAgIEFzc2VtYmxlcjo6QWRkcmVzcyB0eXBlQWRk
cmVzcyhyZWxhdGlvblBvaW50ZXIsIE9CSkVDVF9PRkZTRVRPRihTZWxlY3RvckNoZWNrZXI6OlN0
eWxlUmVsYXRpb24sIHR5cGUpKTsKKyAgICBBc3NlbWJsZXI6OkFkZHJlc3MgdHlwZUFkZHJlc3Mo
cmVsYXRpb25Qb2ludGVyLCBPQkpFQ1RfT0ZGU0VUT0YoU3R5bGU6OlJlbGF0aW9uLCB0eXBlKSk7
CiAgICAgbV9hc3NlbWJsZXIuc3RvcmUzMihBc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihyZWxhdGlv
blR5cGUpLCB0eXBlQWRkcmVzcyk7CiAKICAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgQXNzZW1i
bGVyOjpBZGRyZXNzIHZhbHVlQWRkcmVzcyhyZWxhdGlvblBvaW50ZXIsIE9CSkVDVF9PRkZTRVRP
RihTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb24sIHZhbHVlKSk7CisgICAgICAgIEFzc2Vt
Ymxlcjo6QWRkcmVzcyB2YWx1ZUFkZHJlc3MocmVsYXRpb25Qb2ludGVyLCBPQkpFQ1RfT0ZGU0VU
T0YoU3R5bGU6OlJlbGF0aW9uLCB2YWx1ZSkpOwogICAgICAgICBtX2Fzc2VtYmxlci5zdG9yZTMy
KCp2YWx1ZSwgdmFsdWVBZGRyZXNzKTsKICAgICB9CiB9CkBAIC0zMDU2LDcgKzMwNTcsNyBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiB7CiAgICAgZ2VuZXJhdGVT
cGVjaWFsRmFpbHVyZUluUXVpcmtzTW9kZUZvckFjdGl2ZUFuZEhvdmVySWZOZWVkZWQoZmFpbHVy
ZUNhc2VzLCBmcmFnbWVudCk7CiAKLSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29s
dmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVS
ZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2ZSk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9u
SWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHlsZTo6UmVsYXRpb246
OkFmZmVjdGVkQnlBY3RpdmUpOwogCiAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fz
c2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlv
bkNhbGxzKTsKICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVsZW1lbnRJc0Fj
dGl2ZSk7CkBAIC0zMTA1LDcgKzMxMDYsNyBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6
Z2VuZXJhdGVFbGVtCiAgICAgbV9hc3NlbWJsZXIubW92ZShBc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MigxKSwgaXNFbXB0eVJlc3VsdHMpOwogICAgIG5vdEVtcHR5LmxpbmsoJm1fYXNzZW1ibGVyKTsK
IAotICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFk
ZHJlc3NSZWdpc3RlciwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5
RW1wdHksIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRChpc0VtcHR5UmVzdWx0cykpOworICAgIGdlbmVy
YXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3Rl
ciwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5RW1wdHksIEFzc2VtYmxlcjo6UmVnaXN0ZXJJ
RChpc0VtcHR5UmVzdWx0cykpOwogCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxl
ci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpaZXJvLCBpc0VtcHR5UmVzdWx0cykpOwogfQpAQCAt
MzE0MCwxNCArMzE0MSwxNCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVF
bGVtCiAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRv
cik7CiAgICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVtcElmTm90UmVz
b2x2aW5nU3R5bGUoY2hlY2tpbmdDb250ZXh0KTsKIAotICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxh
dGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzKTsKKyAgICBnZW5l
cmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBwYXJlbnRFbGVtZW50LCBTdHls
ZTo6UmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRSdWxlcyk7CiAgICAgbV9y
ZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIocGFyZW50RWxlbWVudCk7CiAKICAg
ICAvLyBUaGUgcGFyZW50IG1hcmtpbmcgaXMgdW5jb25kaXRpb25hbC4gSWYgdGhlIG1hdGNoaW5n
IGlzIG5vdCBhIHN1Y2Nlc3MsIHdlIGNhbiBub3cgZmFpbC4KICAgICAvLyBPdGhlcndpc2Ugd2Ug
bmVlZCB0byBhcHBseSBzZXRGaXJzdENoaWxkU3RhdGUoKSBvbiB0aGUgUmVuZGVyU3R5bGUuCiAg
ICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVy
OjpOb25aZXJvLCBpc0ZpcnN0Q2hpbGRSZWdpc3RlcikpOwogCi0gICAgZ2VuZXJhdGVBZGRTdHls
ZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0
b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpGaXJzdENoaWxkKTsKKyAgICBnZW5lcmF0ZUFkZFN0
eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTdHls
ZTo6UmVsYXRpb246OkZpcnN0Q2hpbGQpOwogCiAgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygm
bV9hc3NlbWJsZXIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNo
VGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgaXNGaXJzdENoaWxkUmVnaXN0ZXIpKTsKQEAgLTMx
NjIsNyArMzE2Myw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0K
IHsKICAgICBnZW5lcmF0ZVNwZWNpYWxGYWlsdXJlSW5RdWlya3NNb2RlRm9yQWN0aXZlQW5kSG92
ZXJJZk5lZWRlZChmYWlsdXJlQ2FzZXMsIGZyYWdtZW50KTsKIAotICAgIGdlbmVyYXRlQWRkU3R5
bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0
b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpBZmZlY3RlZEJ5SG92ZXIpOworICAgIGdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3Rlciwg
U3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5SG92ZXIpOwogCiAgICAgRnVuY3Rpb25DYWxsIGZ1
bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9j
YXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRy
ZXNzKGVsZW1lbnRJc0hvdmVyZWQpOwpAQCAtMzIyNCwxNCArMzIyNSwxNCBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtCiAgICAgTG9jYWxSZWdpc3RlciBjaGVja2lu
Z0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7CiAgICAgQXNzZW1ibGVyOjpKdW1wIG5vdFJl
c29sdmluZ1N0eWxlID0ganVtcElmTm90UmVzb2x2aW5nU3R5bGUoY2hlY2tpbmdDb250ZXh0KTsK
IAotICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIHBhcmVudEVs
ZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5
TGFzdENoaWxkUnVsZXMpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVja2luZ0Nv
bnRleHQsIHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5
TGFzdENoaWxkUnVsZXMpOwogICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVhbGxvY2F0ZVJlZ2lz
dGVyKHBhcmVudEVsZW1lbnQpOwogCiAgICAgLy8gVGhlIHBhcmVudCBtYXJraW5nIGlzIHVuY29u
ZGl0aW9uYWwuIElmIHRoZSBtYXRjaGluZyBpcyBub3QgYSBzdWNjZXNzLCB3ZSBjYW4gbm93IGZh
aWwuCiAgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gYXBwbHkgc2V0TGFzdENoaWxkU3RhdGUo
KSBvbiB0aGUgUmVuZGVyU3R5bGUuCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxl
ci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpOb25aZXJvLCBpc0xhc3RDaGlsZFJlZ2lzdGVyKSk7
CiAKLSAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBlbGVtZW50
QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246Okxhc3RDaGls
ZCk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVu
dEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0aW9uOjpMYXN0Q2hpbGQpOwogCiAgICAgbm90
UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOwogICAgIGZhaWx1cmVDYXNlcy5hcHBl
bmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6Tm9uWmVybywgaXNMYXN0Q2hp
bGRSZWdpc3RlcikpOwpAQCAtMzI4Myw4ICszMjg0LDggQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbQogICAgIExvY2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250ZXh0KG1f
cmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgIEFzc2VtYmxlcjo6SnVtcCBub3RSZXNvbHZpbmdTdHls
ZSA9IGp1bXBJZk5vdFJlc29sdmluZ1N0eWxlKGNoZWNraW5nQ29udGV4dCk7CiAKLSAgICBnZW5l
cmF0ZUFkZFN0eWxlUmVsYXRpb24oY2hlY2tpbmdDb250ZXh0LCBwYXJlbnRFbGVtZW50LCBTZWxl
Y3RvckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0Q2hpbGRS
dWxlcyk7Ci0gICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgcGFy
ZW50RWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpDaGlsZHJlbkFmZmVj
dGVkQnlMYXN0Q2hpbGRSdWxlcyk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNoZWNr
aW5nQ29udGV4dCwgcGFyZW50RWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpDaGlsZHJlbkFmZmVj
dGVkQnlGaXJzdENoaWxkUnVsZXMpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbihjaGVj
a2luZ0NvbnRleHQsIHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZl
Y3RlZEJ5TGFzdENoaWxkUnVsZXMpOwogCiAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9j
YXRlUmVnaXN0ZXIocGFyZW50RWxlbWVudCk7CiAKQEAgLTMyOTIsOCArMzI5Myw4IEBAIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAvLyBPdGhlcndpc2Ugd2Ug
bmVlZCB0byBhcHBseSBzZXRMYXN0Q2hpbGRTdGF0ZSgpIG9uIHRoZSBSZW5kZXJTdHlsZS4KICAg
ICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6
Ok5vblplcm8sIGlzT25seUNoaWxkUmVnaXN0ZXIpKTsKIAotICAgIGdlbmVyYXRlQWRkU3R5bGVS
ZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9y
Q2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Rmlyc3RDaGlsZCk7Ci0gICAgZ2VuZXJhdGVBZGRTdHls
ZVJlbGF0aW9uKGNoZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU2VsZWN0
b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpMYXN0Q2hpbGQpOworICAgIGdlbmVyYXRlQWRkU3R5
bGVSZWxhdGlvbihjaGVja2luZ0NvbnRleHQsIGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFN0eWxl
OjpSZWxhdGlvbjo6Rmlyc3RDaGlsZCk7CisgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0aW9uKGNo
ZWNraW5nQ29udGV4dCwgZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0aW9uOjpM
YXN0Q2hpbGQpOwogCiAgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOwog
ICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxl
cjo6Tm9uWmVybywgaXNPbmx5Q2hpbGRSZWdpc3RlcikpOwpAQCAtMzMwMyw3ICszMzA0LDcgQEAg
c3RhdGljIGJvb2wgbWFrZUNvbnRleHRTdHlsZVVuaXF1ZUlmTmVjZQogewogICAgIGlmIChpczxI
VE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpKSB7CiAgICAgICAgIGlmIChjaGVj
a2luZ0NvbnRleHQtPnJlc29sdmluZ01vZGUgPT0gU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpSZXNv
bHZpbmdTdHlsZSkKLSAgICAgICAgICAgIGNoZWNraW5nQ29udGV4dC0+c3R5bGVSZWxhdGlvbnMu
YXBwZW5kKHsgKmVsZW1lbnQsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6VW5pcXVl
LCAxIH0pOworICAgICAgICAgICAgY2hlY2tpbmdDb250ZXh0LT5zdHlsZVJlbGF0aW9ucy5hcHBl
bmQoeyAqZWxlbWVudCwgU3R5bGU6OlJlbGF0aW9uOjpVbmlxdWUsIDEgfSk7CiAgICAgICAgIHJl
dHVybiBkb3duY2FzdDxIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudD4oKmVsZW1lbnQpLmlzUGxh
Y2Vob2xkZXJWaXNpYmxlKCk7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTM0NTcsNyAr
MzQ1OCw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc0FkamFjZW50UmVsYXRpb24oZnJhZ21lbnQucmVsYXRp
b25Ub1JpZ2h0RnJhZ21lbnQpKQotICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJl
c29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5
bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZyk7CisgICAgICAgIGdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3Rlciwg
U3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKTsKIAogICAgIC8vIFNl
dHVwIHRoZSBjb3VudGVyIGF0IDEuCiAgICAgTG9jYWxSZWdpc3RlcldpdGhQcmVmZXJlbmNlIGVs
ZW1lbnRDb3VudGVyKG1fcmVnaXN0ZXJBbGxvY2F0b3IsIEpTQzo6R1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKQEAgLTM0NzUsNyArMzQ3Niw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpn
ZW5lcmF0ZUVsZW0KIAogICAgICAgICBBc3NlbWJsZXI6Okp1bXBMaXN0IG5vQ2FjaGVkQ2hpbGRJ
bmRleENhc2VzOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50
KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZpb3VzU2libGluZyk7Ci0gICAgICAgIGdlbmVyYXRl
QWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUocHJldmlvdXNTaWJsaW5nLCBTZWxlY3Rv
ckNoZWNrZXI6OlN0eWxlUmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CisgICAgICAgIGdl
bmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUocHJldmlvdXNTaWJsaW5nLCBT
dHlsZTo6UmVsYXRpb246OkFmZmVjdHNOZXh0U2libGluZyk7CiAgICAgICAgIG5vQ2FjaGVkQ2hp
bGRJbmRleENhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpa
ZXJvLCBBc3NlbWJsZXI6OkFkZHJlc3MocHJldmlvdXNTaWJsaW5nLCBOb2RlOjpub2RlRmxhZ3NN
ZW1vcnlPZmZzZXQoKSksIEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdIYXNSYXJl
RGF0YSgpKSkpOwogICAgICAgICB7CiAgICAgICAgICAgICBMb2NhbFJlZ2lzdGVyIGVsZW1lbnRS
YXJlRGF0YShtX3JlZ2lzdGVyQWxsb2NhdG9yKTsKQEAgLTM0OTEsMTMgKzM0OTIsMTMgQEAgdm9p
ZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogCiAgICAgICAgIEFzc2VtYmxl
cjo6TGFiZWwgbG9vcFN0YXJ0ID0gbV9hc3NlbWJsZXIubGFiZWwoKTsKICAgICAgICAgZ2VuZXJh
dGVXYWxrVG9QcmV2aW91c0FkamFjZW50RWxlbWVudChub01vcmVTaWJsaW5nc0Nhc2VzLCBwcmV2
aW91c1NpYmxpbmcpOwotICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmlu
Z1N0eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9uOjpB
ZmZlY3RzTmV4dFNpYmxpbmcpOworICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJl
c29sdmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RzTmV4
dFNpYmxpbmcpOwogICAgICAgICBtX2Fzc2VtYmxlci5hZGQzMihBc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgZWxlbWVudENvdW50ZXIpOwogICAgICAgICBtX2Fzc2VtYmxlci5qdW1wKCkubGlu
a1RvKGxvb3BTdGFydCwgJm1fYXNzZW1ibGVyKTsKICAgICAgICAgbm9Nb3JlU2libGluZ3NDYXNl
cy5saW5rKCZtX2Fzc2VtYmxlcik7CiAgICAgfQogCi0gICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0
aW9uSWZSZXNvbHZpbmdTdHlsZShlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBTZWxlY3RvckNoZWNr
ZXI6OlN0eWxlUmVsYXRpb246Ok50aENoaWxkSW5kZXgsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRChl
bGVtZW50Q291bnRlcikpOworICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5n
U3R5bGUoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0aW9uOjpOdGhDaGlsZElu
ZGV4LCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQoZWxlbWVudENvdW50ZXIpKTsKIAogICAgIGZvciAo
Y29uc3QgYXV0byYgc2xvdCA6IHZhbGlkU3Vic2V0RmlsdGVycykKICAgICAgICAgZ2VuZXJhdGVO
dGhGaWx0ZXJUZXN0KGZhaWx1cmVDYXNlcywgZWxlbWVudENvdW50ZXIsIHNsb3QuZmlyc3QsIHNs
b3Quc2Vjb25kKTsKQEAgLTM1MjQsNyArMzUyNSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFpc0FkamFjZW50
UmVsYXRpb24oZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQpKQotICAgICAgICBnZW5l
cmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKGVsZW1lbnRBZGRyZXNzUmVnaXN0
ZXIsIFNlbGVjdG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2li
bGluZyk7CisgICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlvbklmUmVzb2x2aW5nU3R5bGUo
ZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgU3R5bGU6OlJlbGF0aW9uOjpBZmZlY3RlZEJ5UHJldmlv
dXNTaWJsaW5nKTsKIAogICAgIGZvciAoY29uc3QgTnRoQ2hpbGRPZlNlbGVjdG9ySW5mbyogbnRo
Q2hpbGRPZlNlbGVjdG9ySW5mbyA6IHZhbGlkU3Vic2V0RmlsdGVycykgewogICAgICAgICAvLyBT
ZXR1cCB0aGUgY291bnRlciBhdCAxLgpAQCAtMzU0MSw3ICszNTQyLDcgQEAgdm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbQogICAgICAgICAgICAgQXNzZW1ibGVyOjpMYWJl
bCBsb29wU3RhcnQgPSBtX2Fzc2VtYmxlci5sYWJlbCgpOwogCiAgICAgICAgICAgICBnZW5lcmF0
ZVdhbGtUb1ByZXZpb3VzQWRqYWNlbnRFbGVtZW50KG5vTW9yZVNpYmxpbmdzQ2FzZXMsIHByZXZp
b3VzU2libGluZyk7Ci0gICAgICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29s
dmluZ1N0eWxlKHByZXZpb3VzU2libGluZywgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJlbGF0aW9u
OjpBZmZlY3RzTmV4dFNpYmxpbmcpOworICAgICAgICAgICAgZ2VuZXJhdGVBZGRTdHlsZVJlbGF0
aW9uSWZSZXNvbHZpbmdTdHlsZShwcmV2aW91c1NpYmxpbmcsIFN0eWxlOjpSZWxhdGlvbjo6QWZm
ZWN0c05leHRTaWJsaW5nKTsKIAogICAgICAgICAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBsb2Nh
bEZhaWx1cmVDYXNlczsKICAgICAgICAgICAgIGdlbmVyYXRlRWxlbWVudE1hdGNoZXNTZWxlY3Rv
ckxpc3QobG9jYWxGYWlsdXJlQ2FzZXMsIHByZXZpb3VzU2libGluZywgbnRoQ2hpbGRPZlNlbGVj
dG9ySW5mby0+c2VsZWN0b3JMaXN0KTsKQEAgLTM1NjQsNyArMzU2NSw3IEBAIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW0KICAgICAgICAgTG9jYWxSZWdpc3RlciBwYXJl
bnRFbGVtZW50KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgICAgICBnZW5lcmF0ZVdhbGtUb1Bh
cmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBwYXJlbnRFbGVtZW50KTsKIAotICAgICAgICBnZW5l
cmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxlKHBhcmVudEVsZW1lbnQsIFNlbGVj
dG9yQ2hlY2tlcjo6U3R5bGVSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3Np
dGlvbmFsUnVsZXMpOworICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmlu
Z1N0eWxlKHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5
QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMpOwogCiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
bV9hc3NlbWJsZXIuYnJhbmNoVGVzdDMyKEFzc2VtYmxlcjo6WmVybywgQXNzZW1ibGVyOjpBZGRy
ZXNzKHBhcmVudEVsZW1lbnQsIE5vZGU6Om5vZGVGbGFnc01lbW9yeU9mZnNldCgpKSwgQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoTm9kZTo6ZmxhZ0lzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKSkp
KTsKIApAQCAtMzYwNyw3ICszNjA4LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbQogICAgICAgICBMb2NhbFJlZ2lzdGVyIHBhcmVudEVsZW1lbnQobV9yZWdpc3Rl
ckFsbG9jYXRvcik7CiAgICAgICAgIGdlbmVyYXRlV2Fsa1RvUGFyZW50RWxlbWVudChmYWlsdXJl
Q2FzZXMsIHBhcmVudEVsZW1lbnQpOwogCi0gICAgICAgIGdlbmVyYXRlQWRkU3R5bGVSZWxhdGlv
bklmUmVzb2x2aW5nU3R5bGUocGFyZW50RWxlbWVudCwgU2VsZWN0b3JDaGVja2VyOjpTdHlsZVJl
bGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFs
UnVsZXMpOworICAgICAgICBnZW5lcmF0ZUFkZFN0eWxlUmVsYXRpb25JZlJlc29sdmluZ1N0eWxl
KHBhcmVudEVsZW1lbnQsIFN0eWxlOjpSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5UHJvcGVy
dHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKTsKIAogICAgICAgICBmYWlsdXJlQ2FzZXMu
YXBwZW5kKG1fYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihBc3NlbWJsZXI6Olplcm8sIEFzc2VtYmxl
cjo6QWRkcmVzcyhwYXJlbnRFbGVtZW50LCBOb2RlOjpub2RlRmxhZ3NNZW1vcnlPZmZzZXQoKSks
IEFzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE5vZGU6OmZsYWdJc1BhcnNpbmdDaGlsZHJlbkZpbmlz
aGVkKCkpKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTk3NjM2
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjAzMiw3ICsyMDMyLDExIEBAIFJlZjxSZW5kZXJTdHlsZT4gRG9jdW1lbnQ6OnN0eWxlRm9yRWxl
bWUKICAgICBSZXNvdXJjZUxvYWRTdXNwZW5kZXIgc3VzcGVuZGVyOwogCiAgICAgVGVtcG9yYXJ5
Q2hhbmdlPGJvb2w+IGNoYW5nZShtX2lnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cywgdHJ1ZSk7Ci0g
ICAgcmV0dXJuIGVsZW1lbnQucmVzb2x2ZVN0eWxlKHBhcmVudFN0eWxlKTsKKyAgICBhdXRvIGVs
ZW1lbnRTdHlsZSA9IGVsZW1lbnQucmVzb2x2ZVN0eWxlKHBhcmVudFN0eWxlKTsKKworICAgIFN0
eWxlOjpjb21taXRSZWxhdGlvbnNUb0RvY3VtZW50KFdURk1vdmUoZWxlbWVudFN0eWxlLnJlbGF0
aW9ucykpOworCisgICAgcmV0dXJuIFdURk1vdmUoZWxlbWVudFN0eWxlLnJlbmRlclN0eWxlKTsK
IH0KIAogYm9vbCBEb2N1bWVudDo6dXBkYXRlTGF5b3V0SWZEaW1lbnNpb25zT3V0T2ZEYXRlKEVs
ZW1lbnQmIGVsZW1lbnQsIERpbWVuc2lvbnNDaGVjayBkaW1lbnNpb25zQ2hlY2spCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNjcsNyArMTM2Nyw3IEBAIFN0eWxl
UmVzb2x2ZXImIEVsZW1lbnQ6OnN0eWxlUmVzb2x2ZXIoKQogICAgIHJldHVybiBkb2N1bWVudCgp
LmVuc3VyZVN0eWxlUmVzb2x2ZXIoKTsKIH0KIAotUmVmPFJlbmRlclN0eWxlPiBFbGVtZW50Ojpy
ZXNvbHZlU3R5bGUoUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlKQorRWxlbWVudFN0eWxlIEVsZW1l
bnQ6OnJlc29sdmVTdHlsZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpCiB7CiAgICAgcmV0dXJu
IHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKnRoaXMsIHBhcmVudFN0eWxlKTsKIH0K
QEAgLTMyODcsMTAgKzMyODcsMTAgQEAgdm9pZCBFbGVtZW50OjpkaWREZXRhY2hSZW5kZXJlcnMo
KQogICAgIEFTU0VSVChoYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSk7CiB9CiAKLVJl
ZlB0cjxSZW5kZXJTdHlsZT4gRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJT
dHlsZSYsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gRWxlbWVudDo6cmVz
b2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqKQogewogICAgIEFTU0VS
VChoYXNDdXN0b21TdHlsZVJlc29sdmVDYWxsYmFja3MoKSk7Ci0gICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIE51bGxvcHQ7CiB9CiAKIHZvaWQgRWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVz
RnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYgb3RoZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJ
KHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTUyLDYgKzUyLDcgQEAgY2xhc3MgUGxhdGZvcm1XaGVlbEV2ZW50OwogY2xh
c3MgUHNldWRvRWxlbWVudDsKIGNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwogY2xhc3Mg
UmVuZGVyVHJlZVBvc2l0aW9uOworc3RydWN0IEVsZW1lbnRTdHlsZTsKIAogZW51bSBTcGVsbGNo
ZWNrQXR0cmlidXRlU3RhdGUgewogICAgIFNwZWxsY2hlY2tBdHRyaWJ1dGVUcnVlLApAQCAtNDc5
LDcgKzQ4MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJz
KCk7CiAgICAgdmlydHVhbCB2b2lkIHdpbGxEZXRhY2hSZW5kZXJlcnMoKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkRGV0YWNoUmVuZGVyZXJzKCk7Ci0gICAgdmlydHVhbCBSZWZQdHI8UmVuZGVyU3R5
bGU+IGN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5k
ZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKTsKKyAgICB2aXJ0dWFsIE9wdGlvbmFsPEVsZW1lbnRT
dHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVy
U3R5bGUqIHNoYWRvd0hvc3RTdHlsZSk7CiAKICAgICBMYXlvdXRSZWN0IGFic29sdXRlRXZlbnRI
YW5kbGVyQm91bmRzKGJvb2wmIGluY2x1ZGVzRml4ZWRQb3NpdGlvbkVsZW1lbnRzKSBvdmVycmlk
ZTsKIApAQCAtNDk4LDcgKzQ5OSw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcigpOwotICAgIFJlZjxSZW5kZXJTdHlsZT4gcmVzb2x2ZVN0eWxl
KFJlbmRlclN0eWxlKiBwYXJlbnRTdHlsZSk7CisgICAgRWxlbWVudFN0eWxlIHJlc29sdmVTdHls
ZShSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUpOwogCiAgICAgdmlydHVhbCB2b2lkIGlzVmlzaWJs
ZUluVmlld3BvcnRDaGFuZ2VkKCkgeyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1
ZG9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9F
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIlJl
bmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1ZGUgIlJlbmRl
clF1b3RlLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTc2LDkgKzc3LDEyIEBAIHZvaWQgUHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxl
bWVudCgpCiAgICAgbV9ob3N0RWxlbWVudCA9IG51bGxwdHI7CiB9CiAKLVJlZlB0cjxSZW5kZXJT
dHlsZT4gUHNldWRvRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYg
cGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gUHNldWRv
RWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSwgUmVu
ZGVyU3R5bGUqKQogewotICAgIHJldHVybiBtX2hvc3RFbGVtZW50LT5yZW5kZXJlcigpLT5nZXRD
YWNoZWRQc2V1ZG9TdHlsZShtX3BzZXVkb0lkLCAmcGFyZW50U3R5bGUpOworICAgIGF1dG8qIHN0
eWxlID0gbV9ob3N0RWxlbWVudC0+cmVuZGVyZXIoKS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUobV9w
c2V1ZG9JZCwgJnBhcmVudFN0eWxlKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4g
TnVsbG9wdDsKKyAgICByZXR1cm4gRWxlbWVudFN0eWxlKCpzdHlsZSk7CiB9CiAKIHZvaWQgUHNl
dWRvRWxlbWVudDo6ZGlkQXR0YWNoUmVuZGVyZXJzKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Qc2V1ZG9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1BzZXVk
b0VsZW1lbnQuaAkocmV2aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1BzZXVk
b0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBwdWJsaWM6CiAgICAg
RWxlbWVudCogaG9zdEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2hvc3RFbGVtZW50OyB9CiAg
ICAgdm9pZCBjbGVhckhvc3RFbGVtZW50KCk7CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1
c3RvbVN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHls
ZSogc2hhZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+
IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxl
KiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkQXR0YWNoUmVuZGVyZXJz
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBkaWRSZWNhbGNTdHlsZShTdHlsZTo6Q2hhbmdlKSBvdmVy
cmlkZTsKICAgICBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmKSBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkocmV2
aXNpb24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODIsNyArODIsNyBAQCBTdHJpbmdXaXRoRGlyZWN0aW9uIEhU
TUxUaXRsZUVsZW1lbnQ6OmNvCiAgICAgaWYgKFJlbmRlclN0eWxlKiBjb21wdXRlZFN0eWxlID0g
dGhpcy0+Y29tcHV0ZWRTdHlsZSgpKQogICAgICAgICBkaXJlY3Rpb24gPSBjb21wdXRlZFN0eWxl
LT5kaXJlY3Rpb24oKTsKICAgICBlbHNlIHsKLSAgICAgICAgYXV0byBzdHlsZSA9IHJlc29sdmVT
dHlsZShwYXJlbnRFbGVtZW50KCkgPyBwYXJlbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCkgOiBu
dWxscHRyKTsKKyAgICAgICAgYXV0byBzdHlsZSA9IHN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVs
ZW1lbnQoKnRoaXMsIHBhcmVudEVsZW1lbnQoKSA/IHBhcmVudEVsZW1lbnQoKS0+cmVuZGVyU3R5
bGUoKSA6IG51bGxwdHIpLnJlbmRlclN0eWxlOwogICAgICAgICBkaXJlY3Rpb24gPSBzdHlsZS5n
ZXQoKS5kaXJlY3Rpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIFN0cmluZ1dpdGhEaXJlY3Rpb24o
dGV4dCgpLCBkaXJlY3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvU2xp
ZGVyVGh1bWJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3No
YWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKQEAgLTU3Myw3ICs1NzQsNyBAQCBIVE1MSW5wdXRFbGVtZW50KiBTbGlkZXJUaHVt
YkVsZW1lbnQ6OmhvCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbnB1dEVsZW1lbnQ+KHNoYWRv
d0hvc3QoKSk7CiB9CiAKLVJlZlB0cjxSZW5kZXJTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50Ojpj
dXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5bGUqIGhvc3RTdHls
ZSkKK09wdGlvbmFsPEVsZW1lbnRTdHlsZT4gU2xpZGVyVGh1bWJFbGVtZW50OjpyZXNvbHZlQ3Vz
dG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQogewogICAgIC8v
IFRoaXMgZG9lc24ndCBhY3R1YWxseSBjb21wdXRlIHN0eWxlLiBUaGlzIGlzIGp1c3QgYSBoYWNr
IHRvIHBpY2sgc2hhZG93IHBzZXVkbyBpZCB3aGVuIGhvc3Qgc3R5bGUgaXMga25vd24uCiAKQEAg
LTU4MSw3ICs1ODIsNyBAQCBSZWZQdHI8UmVuZGVyU3R5bGU+IFNsaWRlclRodW1iRWxlbWVudDo6
CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21pY1N0cmluZz4gbWVkaWFTbGlk
ZXJUaHVtYlNoYWRvd1BzZXVkb0lkKCItd2Via2l0LW1lZGlhLXNsaWRlci10aHVtYiIsIEF0b21p
Y1N0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogCiAgICAgaWYgKCFob3N0U3R5bGUpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gTnVsbG9wdDsKIAogICAgIHN3
aXRjaCAoaG9zdFN0eWxlLT5hcHBlYXJhbmNlKCkpIHsKICAgICBjYXNlIE1lZGlhU2xpZGVyUGFy
dDoKQEAgLTU5Niw3ICs1OTcsNyBAQCBSZWZQdHI8UmVuZGVyU3R5bGU+IFNsaWRlclRodW1iRWxl
bWVudDo6CiAgICAgICAgIG1fc2hhZG93UHNldWRvSWQgPSBzbGlkZXJUaHVtYlNoYWRvd1BzZXVk
b0lkOwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxsb3B0Owog
fQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFNsaWRlclRodW1iRWxlbWVudDo6c2hhZG93UHNldWRv
SWQoKSBjb25zdApAQCAtNjI3LDcgKzYyOCw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBT
bGlkZXJDb250YWluZXIKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVuZGVyU2xpZGVyQ29u
dGFpbmVyPigqdGhpcywgV1RGTW92ZShzdHlsZSkpOwogfQogCi1SZWZQdHI8UmVuZGVyU3R5bGU+
IFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5
bGUmLCBSZW5kZXJTdHlsZSogaG9zdFN0eWxlKQorT3B0aW9uYWw8RWxlbWVudFN0eWxlPiBTbGlk
ZXJDb250YWluZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBSZW5k
ZXJTdHlsZSogaG9zdFN0eWxlKQogewogICAgIC8vIFRoaXMgZG9lc24ndCBhY3R1YWxseSBjb21w
dXRlIHN0eWxlLiBUaGlzIGlzIGp1c3QgYSBoYWNrIHRvIHBpY2sgc2hhZG93IHBzZXVkbyBpZCB3
aGVuIGhvc3Qgc3R5bGUgaXMga25vd24uCiAKQEAgLTYzNSw3ICs2MzYsNyBAQCBSZWZQdHI8UmVu
ZGVyU3R5bGU+IFNsaWRlckNvbnRhaW5lckVsZW1lCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PGNvbnN0IEF0b21pY1N0cmluZz4gc2xpZGVyQ29udGFpbmVyKCItd2Via2l0LXNsaWRlci1jb250
YWluZXIiLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKIAogICAgIGlmICgh
aG9zdFN0eWxlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIE51bGxv
cHQ7CiAKICAgICBzd2l0Y2ggKGhvc3RTdHlsZS0+YXBwZWFyYW5jZSgpKSB7CiAgICAgY2FzZSBN
ZWRpYVNsaWRlclBhcnQ6CkBAIC02NTAsNyArNjUxLDcgQEAgUmVmUHRyPFJlbmRlclN0eWxlPiBT
bGlkZXJDb250YWluZXJFbGVtZQogICAgICAgICBtX3NoYWRvd1BzZXVkb0lkID0gc2xpZGVyQ29u
dGFpbmVyOwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBOdWxsb3B0
OwogfQogCiBjb25zdCBBdG9taWNTdHJpbmcmIFNsaWRlckNvbnRhaW5lckVsZW1lbnQ6OnNoYWRv
d1BzZXVkb0lkKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1NsaWRl
clRodW1iRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93
L1NsaWRlclRodW1iRWxlbWVudC5oCShyZXZpc2lvbiAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL3NoYWRvdy9TbGlkZXJUaHVtYkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgdm9pZCB3aWxsRGV0YWNoUmVuZGVyZXJz
KCkgb3ZlcnJpZGU7CiAKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1c3RvbVN0eWxlRm9yUmVu
ZGVyZXIoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSopIG92ZXJyaWRlOworICAgIE9wdGlvbmFs
PEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiwgUmVuZGVyU3R5
bGUqKSBvdmVycmlkZTsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHN0YXJ0RHJhZ2dpbmcoKTsKQEAgLTEzNSw3ICsx
MzUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIFNsaWRlckNvbnRhaW5lckVsZW1lbnQoRG9j
dW1lbnQmKTsKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRl
cmVyKFJlZjxSZW5kZXJTdHlsZT4mJiwgY29uc3QgUmVuZGVyVHJlZVBvc2l0aW9uJikgb3ZlcnJp
ZGU7Ci0gICAgUmVmUHRyPFJlbmRlclN0eWxlPiBjdXN0b21TdHlsZUZvclJlbmRlcmVyKFJlbmRl
clN0eWxlJiwgUmVuZGVyU3R5bGUqKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5
bGU+IHJlc29sdmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKikgb3ZlcnJp
ZGU7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0IG92ZXJy
aWRlOwogCiAgICAgQXRvbWljU3RyaW5nIG1fc2hhZG93UHNldWRvSWQ7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50
cy5jcHAJKHJldmlzaW9uIDE5NzYzNykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1Rl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcg
QEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5o
IgogI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAj
aW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50SW5wdXRUeXBlLmgiCiAj
aW5jbHVkZSA8d3RmL1JlZi5oPgpAQCAtNzQsNyArNzUsNyBAQCBSZWY8VGV4dENvbnRyb2xJbm5l
ckVsZW1lbnQ+IFRleHRDb250cm9sCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVGV4dENvbnRy
b2xJbm5lckVsZW1lbnQoZG9jdW1lbnQpKTsKIH0KIAotUmVmUHRyPFJlbmRlclN0eWxlPiBUZXh0
Q29udHJvbElubmVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYs
IFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50U3R5bGU+IFRl
eHRDb250cm9sSW5uZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUoUmVuZGVyU3R5bGUmLCBS
ZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQogewogICAgIGF1dG8gaW5uZXJDb250YWluZXJT
dHlsZSA9IFJlbmRlclN0eWxlOjpjcmVhdGUoKTsKICAgICBpbm5lckNvbnRhaW5lclN0eWxlLmdl
dCgpLmluaGVyaXRGcm9tKHNoYWRvd0hvc3RTdHlsZSk7CkBAIC04OCw3ICs4OSw3IEBAIFJlZlB0
cjxSZW5kZXJTdHlsZT4gVGV4dENvbnRyb2xJbm5lckVsZW0KICAgICAvLyBXZSBkb24ndCB3YW50
IHRoZSBzaGFkb3cgZG9tIHRvIGJlIGVkaXRhYmxlLCBzbyB3ZSBzZXQgdGhpcyBibG9jayB0byBy
ZWFkLW9ubHkgaW4gY2FzZSB0aGUgaW5wdXQgaXRzZWxmIGlzIGVkaXRhYmxlLgogICAgIGlubmVy
Q29udGFpbmVyU3R5bGUuZ2V0KCkuc2V0VXNlck1vZGlmeShSRUFEX09OTFkpOwogCi0gICAgcmV0
dXJuIFdURk1vdmUoaW5uZXJDb250YWluZXJTdHlsZSk7CisgICAgcmV0dXJuIEVsZW1lbnRTdHls
ZShXVEZNb3ZlKGlubmVyQ29udGFpbmVyU3R5bGUpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCkBAIC0xMzMsOSArMTM0LDkgQEAgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJs
b2NrKiBUZXh0Q29udHJvbAogICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbElu
bmVyQmxvY2s+KEhUTUxEaXZFbGVtZW50OjpyZW5kZXJlcigpKTsKIH0KIAotUmVmUHRyPFJlbmRl
clN0eWxlPiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OmN1c3RvbVN0eWxlRm9yUmVuZGVy
ZXIoUmVuZGVyU3R5bGUmLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQorT3B0aW9uYWw8
RWxlbWVudFN0eWxlPiBUZXh0Q29udHJvbElubmVyVGV4dEVsZW1lbnQ6OnJlc29sdmVDdXN0b21T
dHlsZShSZW5kZXJTdHlsZSYsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCiB7Ci0gICAg
cmV0dXJuIGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqc2hhZG93SG9zdCgp
KS5jcmVhdGVJbm5lclRleHRTdHlsZSgqc2hhZG93SG9zdFN0eWxlKTsKKyAgICByZXR1cm4gRWxl
bWVudFN0eWxlKGRvd25jYXN0PEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Pigqc2hhZG93SG9z
dCgpKS5jcmVhdGVJbm5lclRleHRTdHlsZSgqc2hhZG93SG9zdFN0eWxlKSk7CiB9CiAKIC8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE0NywxOCArMTQ4LDE3IEBAIFRleHRDb250
cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpUZXh0Q29udHIKICAgICBzZXRIYXNDdXN0b21TdHlsZVJl
c29sdmVDYWxsYmFja3MoKTsKIH0KIAotUmVmUHRyPFJlbmRlclN0eWxlPiBUZXh0Q29udHJvbFBs
YWNlaG9sZGVyRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJTdHlsZSYgcGFy
ZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpCitPcHRpb25hbDxFbGVtZW50
U3R5bGU+IFRleHRDb250cm9sUGxhY2Vob2xkZXJFbGVtZW50OjpyZXNvbHZlQ3VzdG9tU3R5bGUo
UmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hhZG93SG9zdFN0eWxlKQog
ewogICAgIGF1dG8gc3R5bGUgPSByZXNvbHZlU3R5bGUoJnBhcmVudFN0eWxlKTsKIAogICAgIGF1
dG8mIGNvbnRyb2xFbGVtZW50ID0gZG93bmNhc3Q8SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ+
KCpjb250YWluaW5nU2hhZG93Um9vdCgpLT5ob3N0KCkpOwotICAgIHN0eWxlLT5zZXREaXNwbGF5
KGNvbnRyb2xFbGVtZW50LmlzUGxhY2Vob2xkZXJWaXNpYmxlKCkgPyBCTE9DSyA6IE5PTkUpOwor
ICAgIHN0eWxlLnJlbmRlclN0eWxlLT5zZXREaXNwbGF5KGNvbnRyb2xFbGVtZW50LmlzUGxhY2Vo
b2xkZXJWaXNpYmxlKCkgPyBCTE9DSyA6IE5PTkUpOwogCiAgICAgaWYgKGlzPEhUTUxJbnB1dEVs
ZW1lbnQ+KGNvbnRyb2xFbGVtZW50KSkgewogICAgICAgICBhdXRvJiBpbnB1dEVsZW1lbnQgPSBk
b3duY2FzdDxIVE1MSW5wdXRFbGVtZW50Pihjb250cm9sRWxlbWVudCk7Ci0gICAgICAgIHN0eWxl
LT5zZXRUZXh0T3ZlcmZsb3coaW5wdXRFbGVtZW50LnNob3VsZFRydW5jYXRlVGV4dCgqc2hhZG93
SG9zdFN0eWxlKSA/IFRleHRPdmVyZmxvd0VsbGlwc2lzIDogVGV4dE92ZXJmbG93Q2xpcCk7Cisg
ICAgICAgIHN0eWxlLnJlbmRlclN0eWxlLT5zZXRUZXh0T3ZlcmZsb3coaW5wdXRFbGVtZW50LnNo
b3VsZFRydW5jYXRlVGV4dCgqc2hhZG93SG9zdFN0eWxlKSA/IFRleHRPdmVyZmxvd0VsbGlwc2lz
IDogVGV4dE92ZXJmbG93Q2xpcCk7CiAgICAgfQotCiAgICAgcmV0dXJuIFdURk1vdmUoc3R5bGUp
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVy
RWxlbWVudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0
Q29udHJvbElubmVyRWxlbWVudHMuaAkocmV2aXNpb24gMTk3NjM3KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgVGV4dENvbnRyb2xJ
bm5lckVsZW1lbnQoRG9jdW1lbnQmKTsKLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IGN1c3RvbVN0
eWxlRm9yUmVuZGVyZXIoUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlLCBSZW5kZXJTdHlsZSogc2hh
ZG93SG9zdFN0eWxlKSBvdmVycmlkZTsKKyAgICBPcHRpb25hbDxFbGVtZW50U3R5bGU+IHJlc29s
dmVDdXN0b21TdHlsZShSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFk
b3dIb3N0U3R5bGUpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIGJvb2wgaXNNb3VzZUZvY3Vz
YWJsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CkBAIC02NSw3ICs2NSw3IEBA
IHB1YmxpYzoKIHByaXZhdGU6CiAgICAgVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KERvY3Vt
ZW50Jik7CiAgICAgUmVuZGVyUHRyPFJlbmRlckVsZW1lbnQ+IGNyZWF0ZUVsZW1lbnRSZW5kZXJl
cihSZWY8UmVuZGVyU3R5bGU+JiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRl
OwotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBpc01vdXNlRm9jdXNhYmxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFs
c2U7IH0KICAgICBib29sIGlzVGV4dENvbnRyb2xJbm5lclRleHRFbGVtZW50KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogfTsKQEAgLTc3LDcgKzc3LDcgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBUZXh0Q29udHJvbFBsYWNlaG9sZGVyRWxlbWVudChEb2N1bWVudCYpOwogICAg
IAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7
CiB9OwogCiBjbGFzcyBTZWFyY2hGaWVsZFJlc3VsdHNCdXR0b25FbGVtZW50IGZpbmFsIDogcHVi
bGljIEhUTUxEaXZFbGVtZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU3Niw5ICsxNTc2LDkg
QEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxlbWVudDo6ZwogICAgIGF1dG8mIHN0
eWxlUmVzb2x2ZXIgPSBlbGVtZW50KCktPnN0eWxlUmVzb2x2ZXIoKTsKIAogICAgIGlmIChwc2V1
ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQgPT0gRklSU1RfTElORV9JTkhFUklURUQpIHsKLSAgICAg
ICAgUmVmUHRyPFJlbmRlclN0eWxlPiByZXN1bHQgPSBzdHlsZVJlc29sdmVyLnN0eWxlRm9yRWxl
bWVudCgqZWxlbWVudCgpLCBwYXJlbnRTdHlsZSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gc3R5
bGVSZXNvbHZlci5zdHlsZUZvckVsZW1lbnQoKmVsZW1lbnQoKSwgcGFyZW50U3R5bGUpLnJlbmRl
clN0eWxlOwogICAgICAgICByZXN1bHQtPnNldFN0eWxlVHlwZShGSVJTVF9MSU5FX0lOSEVSSVRF
RCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgICAgICByZXR1cm4gV1RG
TW92ZShyZXN1bHQpOwogICAgIH0KIAogICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnBzZXVkb1N0
eWxlRm9yRWxlbWVudCgqZWxlbWVudCgpLCBwc2V1ZG9TdHlsZVJlcXVlc3QsICpwYXJlbnRTdHls
ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJOYW1l
ZEZsb3dGcmFnbWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJOYW1lZEZsb3dGcmFnbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
Miw5ICszNTIsOSBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBSZW5kZXJOYW1lZEZsb3dGCiAg
ICAgQVNTRVJUKCFyZW5kZXJlci5pc0Fub255bW91cygpKTsKIAogICAgIC8vIEZJWE1FOiBSZWdp
b24gc3R5bGluZyBmYWlscyBmb3IgcHNldWRvLWVsZW1lbnRzIGJlY2F1c2UgdGhlIHJlbmRlcmVy
cyBkb24ndCBoYXZlIGEgbm9kZS4KLSAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlbmRlck9iamVj
dFJlZ2lvblN0eWxlID0gcmVuZGVyZXIuZWxlbWVudCgpLT5zdHlsZVJlc29sdmVyKCkuc3R5bGVG
b3JFbGVtZW50KCpyZW5kZXJlci5lbGVtZW50KCksICZwYXJlbnRTdHlsZSwgTWF0Y2hBbGxSdWxl
cywgdGhpcyk7CisgICAgYXV0byByZW5kZXJPYmplY3RSZWdpb25TdHlsZSA9IHJlbmRlcmVyLmVs
ZW1lbnQoKS0+c3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqcmVuZGVyZXIuZWxlbWVu
dCgpLCAmcGFyZW50U3R5bGUsIE1hdGNoQWxsUnVsZXMsIHRoaXMpLnJlbmRlclN0eWxlOwogCi0g
ICAgcmV0dXJuIHJlbmRlck9iamVjdFJlZ2lvblN0eWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
V1RGTW92ZShyZW5kZXJPYmplY3RSZWdpb25TdHlsZSk7CiB9CiAKIHZvaWQgUmVuZGVyTmFtZWRG
bG93RnJhZ21lbnQ6OmNvbXB1dGVDaGlsZHJlblN0eWxlSW5SZWdpb24oUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVJlbGF0aW9ucy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZWxhdGlvbnMuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZWxhdGlvbnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlN0eWxlUmVsYXRpb25zLmgiCisKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0eWxlIHsKKworc3RkOjp1bmlx
dWVfcHRyPFJlbGF0aW9ucz4gY29tbWl0UmVsYXRpb25zVG9SZW5kZXJTdHlsZShSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbGF0aW9ucyYgcmVsYXRp
b25zKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZWxhdGlvbnM+IHJlbWFpbmluZ1JlbGF0aW9u
czsKKworICAgIGF1dG8gYXBwZW5kU3R5bGVSZWxhdGlvbiA9IFsmcmVtYWluaW5nUmVsYXRpb25z
XSAoY29uc3QgUmVsYXRpb24mIHJlbGF0aW9uKSB7CisgICAgICAgIGlmICghcmVtYWluaW5nUmVs
YXRpb25zKQorICAgICAgICAgICAgcmVtYWluaW5nUmVsYXRpb25zID0gc3RkOjptYWtlX3VuaXF1
ZTxSZWxhdGlvbnM+KCk7CisgICAgICAgIHJlbWFpbmluZ1JlbGF0aW9ucy0+YXBwZW5kKHJlbGF0
aW9uKTsKKyAgICB9OworCisgICAgZm9yIChhdXRvJiByZWxhdGlvbiA6IHJlbGF0aW9ucykgewor
ICAgICAgICBpZiAoJnJlbGF0aW9uLmVsZW1lbnQgIT0gJmVsZW1lbnQpIHsKKyAgICAgICAgICAg
IGFwcGVuZFN0eWxlUmVsYXRpb24ocmVsYXRpb24pOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChyZWxhdGlvbi50eXBlKSB7CisgICAgICAgIGNhc2Ug
UmVsYXRpb246OkFmZmVjdGVkQnlBY3RpdmU6CisgICAgICAgICAgICBzdHlsZS5zZXRBZmZlY3Rl
ZEJ5QWN0aXZlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6
QWZmZWN0ZWRCeURyYWc6CisgICAgICAgICAgICBzdHlsZS5zZXRBZmZlY3RlZEJ5RHJhZygpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVsYXRpb246OkFmZmVjdGVkQnlFbXB0
eToKKyAgICAgICAgICAgIHN0eWxlLnNldEVtcHR5U3RhdGUocmVsYXRpb24udmFsdWUpOworICAg
ICAgICAgICAgYXBwZW5kU3R5bGVSZWxhdGlvbihyZWxhdGlvbik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0ZWRCeUhvdmVyOgorICAgICAgICAgICAg
c3R5bGUuc2V0QWZmZWN0ZWRCeUhvdmVyKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBSZWxhdGlvbjo6Rmlyc3RDaGlsZDoKKyAgICAgICAgICAgIHN0eWxlLnNldEZpcnN0Q2hp
bGRTdGF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVsYXRpb246Okxh
c3RDaGlsZDoKKyAgICAgICAgICAgIHN0eWxlLnNldExhc3RDaGlsZFN0YXRlKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6VW5pcXVlOgorICAgICAgICAgICAg
c3R5bGUuc2V0VW5pcXVlKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxh
dGlvbjo6QWZmZWN0ZWRCeVByZXZpb3VzU2libGluZzoKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6
QWZmZWN0c05leHRTaWJsaW5nOgorICAgICAgICBjYXNlIFJlbGF0aW9uOjpDaGlsZHJlbkFmZmVj
dGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6Q2hp
bGRyZW5BZmZlY3RlZEJ5Rmlyc3RDaGlsZFJ1bGVzOgorICAgICAgICBjYXNlIFJlbGF0aW9uOjpD
aGlsZHJlbkFmZmVjdGVkQnlQcm9wZXJ0eUJhc2VkQmFja3dhcmRQb3NpdGlvbmFsUnVsZXM6Cisg
ICAgICAgIGNhc2UgUmVsYXRpb246OkNoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVzOgor
ICAgICAgICBjYXNlIFJlbGF0aW9uOjpOdGhDaGlsZEluZGV4OgorICAgICAgICAgICAgYXBwZW5k
U3R5bGVSZWxhdGlvbihyZWxhdGlvbik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcmVtYWluaW5nUmVsYXRpb25zOworfQorCit2b2lkIGNvbW1pdFJl
bGF0aW9uc1RvRG9jdW1lbnQoc3RkOjp1bmlxdWVfcHRyPFJlbGF0aW9ucz4gcmVsYXRpb25zKQor
eworICAgIGlmICghcmVsYXRpb25zKQorICAgICAgICByZXR1cm47CisgICAgZm9yIChhdXRvJiBy
ZWxhdGlvbiA6ICpyZWxhdGlvbnMpIHsKKyAgICAgICAgYXV0byYgZWxlbWVudCA9IGNvbnN0X2Nh
c3Q8RWxlbWVudCY+KHJlbGF0aW9uLmVsZW1lbnQpOworICAgICAgICBzd2l0Y2ggKHJlbGF0aW9u
LnR5cGUpIHsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0ZWRCeUFjdGl2ZToKKyAgICAg
ICAgICAgIGVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QWN0aXZlKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0ZWRCeURyYWc6CisgICAgICAg
ICAgICBlbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeURyYWcoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpBZmZlY3RlZEJ5RW1wdHk6CisgICAgICAgICAg
ICBlbGVtZW50LnNldFN0eWxlQWZmZWN0ZWRCeUVtcHR5KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0ZWRCeUhvdmVyOgorICAgICAgICAgICAgZWxl
bWVudC5zZXRDaGlsZHJlbkFmZmVjdGVkQnlIb3ZlcigpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgUmVsYXRpb246OkFmZmVjdGVkQnlQcmV2aW91c1NpYmxpbmc6CisgICAgICAg
ICAgICBlbGVtZW50LnNldFN0eWxlSXNBZmZlY3RlZEJ5UHJldmlvdXNTaWJsaW5nKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6QWZmZWN0c05leHRTaWJsaW5n
OgorICAgICAgICAgICAgZWxlbWVudC5zZXRBZmZlY3RzTmV4dFNpYmxpbmdFbGVtZW50U3R5bGUo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpDaGlsZHJlbkFm
ZmVjdGVkQnlCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0
Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlvbmFsUnVsZXMoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFJlbGF0aW9uOjpDaGlsZHJlbkFmZmVjdGVkQnlGaXJzdENo
aWxkUnVsZXM6CisgICAgICAgICAgICBlbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUZpcnN0
Q2hpbGRSdWxlcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVsYXRpb246
OkNoaWxkcmVuQWZmZWN0ZWRCeVByb3BlcnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlczoK
KyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5QmFja3dhcmRQb3NpdGlv
bmFsUnVsZXMoKTsKKyAgICAgICAgICAgIGVsZW1lbnQuc2V0Q2hpbGRyZW5BZmZlY3RlZEJ5UHJv
cGVydHlCYXNlZEJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBSZWxhdGlvbjo6Q2hpbGRyZW5BZmZlY3RlZEJ5TGFzdENoaWxkUnVsZXM6
CisgICAgICAgICAgICBlbGVtZW50LnNldENoaWxkcmVuQWZmZWN0ZWRCeUxhc3RDaGlsZFJ1bGVz
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6Rmlyc3RDaGls
ZDoKKyAgICAgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IGVsZW1lbnQucmVuZGVyU3R5bGUoKSkK
KyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Rmlyc3RDaGlsZFN0YXRlKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBSZWxhdGlvbjo6TGFzdENoaWxkOgorICAgICAgICAgICAg
aWYgKGF1dG8qIHN0eWxlID0gZWxlbWVudC5yZW5kZXJTdHlsZSgpKQorICAgICAgICAgICAgICAg
IHN0eWxlLT5zZXRMYXN0Q2hpbGRTdGF0ZSgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgUmVsYXRpb246Ok50aENoaWxkSW5kZXg6CisgICAgICAgICAgICBlbGVtZW50LnNldENo
aWxkSW5kZXgocmVsYXRpb24udmFsdWUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUmVsYXRpb246OlVuaXF1ZToKKyAgICAgICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IGVsZW1l
bnQucmVuZGVyU3R5bGUoKSkKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0VW5pcXVlKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfQorfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVSZWxhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVJlbGF0aW9ucy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVSZWxhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTdHlsZVJlbGF0aW9uc19oCisjZGVmaW5lIFN0eWxl
UmVsYXRpb25zX2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBFbGVtZW50OworY2xhc3MgUmVuZGVyU3R5bGU7CisKK25hbWVzcGFjZSBT
dHlsZSB7CisKK3N0cnVjdCBSZWxhdGlvbiB7CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgQWZm
ZWN0ZWRCeUFjdGl2ZSwKKyAgICAgICAgQWZmZWN0ZWRCeURyYWcsCisgICAgICAgIEFmZmVjdGVk
QnlFbXB0eSwKKyAgICAgICAgQWZmZWN0ZWRCeUhvdmVyLAorICAgICAgICBBZmZlY3RlZEJ5UHJl
dmlvdXNTaWJsaW5nLAorICAgICAgICBBZmZlY3RzTmV4dFNpYmxpbmcsCisgICAgICAgIENoaWxk
cmVuQWZmZWN0ZWRCeUJhY2t3YXJkUG9zaXRpb25hbFJ1bGVzLAorICAgICAgICBDaGlsZHJlbkFm
ZmVjdGVkQnlGaXJzdENoaWxkUnVsZXMsCisgICAgICAgIENoaWxkcmVuQWZmZWN0ZWRCeVByb3Bl
cnR5QmFzZWRCYWNrd2FyZFBvc2l0aW9uYWxSdWxlcywKKyAgICAgICAgQ2hpbGRyZW5BZmZlY3Rl
ZEJ5TGFzdENoaWxkUnVsZXMsCisgICAgICAgIEZpcnN0Q2hpbGQsCisgICAgICAgIExhc3RDaGls
ZCwKKyAgICAgICAgTnRoQ2hpbGRJbmRleCwKKyAgICAgICAgVW5pcXVlLAorICAgIH07CisgICAg
Y29uc3QgRWxlbWVudCYgZWxlbWVudDsKKyAgICBUeXBlIHR5cGU7CisgICAgdW5zaWduZWQgdmFs
dWU7CisKKyAgICBSZWxhdGlvbihjb25zdCBFbGVtZW50JiBlbGVtZW50LCBUeXBlIHR5cGUsIHVu
c2lnbmVkIHZhbHVlID0gMSkKKyAgICAgICAgOiBlbGVtZW50KGVsZW1lbnQpCisgICAgICAgICwg
dHlwZSh0eXBlKQorICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAgIHsgfQorfTsKKwordXNpbmcg
UmVsYXRpb25zID0gVmVjdG9yPFJlbGF0aW9uLCA4PjsKKworc3RkOjp1bmlxdWVfcHRyPFJlbGF0
aW9ucz4gY29tbWl0UmVsYXRpb25zVG9SZW5kZXJTdHlsZShSZW5kZXJTdHlsZSYsIGNvbnN0IEVs
ZW1lbnQmLCBjb25zdCBSZWxhdGlvbnMmKTsKK3ZvaWQgY29tbWl0UmVsYXRpb25zVG9Eb2N1bWVu
dChzdGQ6OnVuaXF1ZV9wdHI8UmVsYXRpb25zPik7CisKK30KK30KKworI2VuZGlmCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVTaGFyaW5nUmVzb2x2ZXIuY3BwCShyZXZpc2lv
biAxOTc2MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVNoYXJpbmdSZXNvbHZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyMiw3ICszMjIsNyBAQCBib29sIFNoYXJpbmdSZXNvbHZl
cjo6c3R5bGVTaGFyaW5nQ2FuZGlkCiAgICAgaWYgKCFydWxlU2V0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoY29uc3RfY2FzdDxT
dHlsZWRFbGVtZW50Jj4oZWxlbWVudCksIG51bGxwdHIsIG1fcnVsZVNldHMsICZtX3NlbGVjdG9y
RmlsdGVyKTsKKyAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoY29uc3RfY2FzdDxT
dHlsZWRFbGVtZW50Jj4oZWxlbWVudCksIG1fcnVsZVNldHMsICZtX3NlbGVjdG9yRmlsdGVyKTsK
ICAgICByZXR1cm4gY29sbGVjdG9yLmhhc0FueU1hdGNoaW5nUnVsZXMocnVsZVNldCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAJKHJldmlz
aW9uIDE5NzYzNikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDE3ICsxNzksMjAgQEAgUmVmPFJlbmRlclN0eWxlPiBU
cmVlUmVzb2x2ZXI6OnN0eWxlRm9yRQogICAgIH0KIAogICAgIGlmIChlbGVtZW50Lmhhc0N1c3Rv
bVN0eWxlUmVzb2x2ZUNhbGxiYWNrcygpKSB7Ci0gICAgICAgIFJlbmRlclN0eWxlKiBzaGFkb3dI
b3N0U3R5bGUgPSBudWxscHRyOwotICAgICAgICBpZiAoYXV0byogc2hhZG93Um9vdCA9IHNjb3Bl
KCkuc2hhZG93Um9vdCkKLSAgICAgICAgICAgIHNoYWRvd0hvc3RTdHlsZSA9IHNoYWRvd1Jvb3Qt
Pmhvc3QoKS0+cmVuZGVyU3R5bGUoKTsKLSAgICAgICAgaWYgKFJlZlB0cjxSZW5kZXJTdHlsZT4g
c3R5bGUgPSBlbGVtZW50LmN1c3RvbVN0eWxlRm9yUmVuZGVyZXIoaW5oZXJpdGVkU3R5bGUsIHNo
YWRvd0hvc3RTdHlsZSkpCi0gICAgICAgICAgICByZXR1cm4gc3R5bGUucmVsZWFzZU5vbk51bGwo
KTsKKyAgICAgICAgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSA9IHNjb3BlKCkuc2hhZG93
Um9vdCA/IHNjb3BlKCkuc2hhZG93Um9vdC0+aG9zdCgpLT5yZW5kZXJTdHlsZSgpIDogbnVsbHB0
cjsKKyAgICAgICAgaWYgKGF1dG8gY3VzdG9tU3R5bGUgPSBlbGVtZW50LnJlc29sdmVDdXN0b21T
dHlsZShpbmhlcml0ZWRTdHlsZSwgc2hhZG93SG9zdFN0eWxlKSkgeworICAgICAgICAgICAgU3R5
bGU6OmNvbW1pdFJlbGF0aW9uc1RvRG9jdW1lbnQoV1RGTW92ZShjdXN0b21TdHlsZS0+cmVsYXRp
b25zKSk7CisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShjdXN0b21TdHlsZS0+cmVuZGVyU3R5
bGUpOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIHNoYXJpbmdFbGVtZW50ID0g
c2NvcGUoKS5zaGFyaW5nUmVzb2x2ZXIucmVzb2x2ZShlbGVtZW50KSkKICAgICAgICAgcmV0dXJu
ICpzaGFyaW5nRWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIAotICAgIHJldHVybiBzY29wZSgpLnN0
eWxlUmVzb2x2ZXIuc3R5bGVGb3JFbGVtZW50KGVsZW1lbnQsICZpbmhlcml0ZWRTdHlsZSwgTWF0
Y2hBbGxSdWxlcywgbnVsbHB0ciwgJnNjb3BlKCkuc2VsZWN0b3JGaWx0ZXIpOworICAgIGF1dG8g
ZWxlbWVudFN0eWxlID0gc2NvcGUoKS5zdHlsZVJlc29sdmVyLnN0eWxlRm9yRWxlbWVudChlbGVt
ZW50LCAmaW5oZXJpdGVkU3R5bGUsIE1hdGNoQWxsUnVsZXMsIG51bGxwdHIsICZzY29wZSgpLnNl
bGVjdG9yRmlsdGVyKTsKKworICAgIFN0eWxlOjpjb21taXRSZWxhdGlvbnNUb0RvY3VtZW50KFdU
Rk1vdmUoZWxlbWVudFN0eWxlLnJlbGF0aW9ucykpOworICAgIHJldHVybiBXVEZNb3ZlKGVsZW1l
bnRTdHlsZS5yZW5kZXJTdHlsZSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX1JFR0lPTlMpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgJKHJldmlzaW9uIDE5NzYz
NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29uc3RhbnRz
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZVBvc2l0aW9uLmgiCisjaW5jbHVkZSAiU2VsZWN0b3JD
aGVja2VyLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JGaWx0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUNo
YW5nZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hhcmluZ1Jlc29sdmVyLmgiCkBAIC02Miw2ICs2Myw3
IEBAIHByaXZhdGU6CiAgICAgQ2hhbmdlIHJlc29sdmVFbGVtZW50KEVsZW1lbnQmKTsKICAgICB2
b2lkIHJlc29sdmVCZWZvcmVPckFmdGVyUHNldWRvRWxlbWVudChFbGVtZW50JiwgQ2hhbmdlLCBQ
c2V1ZG9JZCwgUmVuZGVyVHJlZVBvc2l0aW9uJik7CiAKKwogICAgIHZvaWQgY3JlYXRlUmVuZGVy
VHJlZVJlY3Vyc2l2ZWx5KEVsZW1lbnQmLCBSZW5kZXJTdHlsZSYsIFJlbmRlclRyZWVQb3NpdGlv
biYsIFJlZlB0cjxSZW5kZXJTdHlsZT4mJiByZXNvbHZlZFN0eWxlKTsKICAgICB2b2lkIGNyZWF0
ZVJlbmRlcmVyKEVsZW1lbnQmLCBSZW5kZXJUcmVlUG9zaXRpb24mLCBSZWZQdHI8UmVuZGVyU3R5
bGU+JiYgcmVzb2x2ZWRTdHlsZSk7CiAgICAgdm9pZCBjcmVhdGVSZW5kZXJUcmVlRm9yQmVmb3Jl
T3JBZnRlclBzZXVkb0VsZW1lbnQoRWxlbWVudCYsIFBzZXVkb0lkLCBSZW5kZXJUcmVlUG9zaXRp
b24mKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NzYzNikK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Nzg4LDExICs3ODgsMTEgQEAgdm9pZCBTVkdFbGVtZW50OjpzeW5jaHJvbml6ZVN5c3RlbUxhbmd1
YQogICAgIGNvbnRleHRFbGVtZW50LT5zeW5jaHJvbml6ZVN5c3RlbUxhbmd1YWdlKCk7CiB9CiAK
LVJlZlB0cjxSZW5kZXJTdHlsZT4gU1ZHRWxlbWVudDo6Y3VzdG9tU3R5bGVGb3JSZW5kZXJlcihS
ZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKikKK09wdGlvbmFsPEVsZW1lbnRT
dHlsZT4gU1ZHRWxlbWVudDo6cmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0eWxlJiBwYXJlbnRT
dHlsZSwgUmVuZGVyU3R5bGUqKQogewogICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGluIGEgPHVz
ZT4gdHJlZSB3ZSBnZXQgdGhlIHN0eWxlIGZyb20gdGhlIGRlZmluaXRpb24gdHJlZS4KICAgICBp
ZiAoYXV0byogc3R5bGVFbGVtZW50ID0gdGhpcy0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIHN0eWxlRWxlbWVudC0+c3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVu
dCgqc3R5bGVFbGVtZW50LCAmcGFyZW50U3R5bGUpOworICAgICAgICByZXR1cm4gc3R5bGVFbGVt
ZW50LT5yZXNvbHZlU3R5bGUoJnBhcmVudFN0eWxlKTsKIAogICAgIHJldHVybiByZXNvbHZlU3R5
bGUoJnBhcmVudFN0eWxlKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNp
b24gMTk3NjM2KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE5LDcgKzExOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHN5bmNocm9uaXplQW5p
bWF0ZWRTVkdBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0OwogICAgIHN0YXRp
YyB2b2lkIHN5bmNocm9uaXplQWxsQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoU1ZHRWxlbWVudCopOwog
IAotICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gY3VzdG9tU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUsIFJlbmRlclN0eWxlKiBzaGFkb3dIb3N0U3R5bGUpIG92ZXJyaWRl
OworICAgIE9wdGlvbmFsPEVsZW1lbnRTdHlsZT4gcmVzb2x2ZUN1c3RvbVN0eWxlKFJlbmRlclN0
eWxlJiBwYXJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHNoYWRvd0hvc3RTdHlsZSkgb3ZlcnJpZGU7
CiAKICAgICBzdGF0aWMgdm9pZCBzeW5jaHJvbml6ZVJlcXVpcmVkRmVhdHVyZXMoU1ZHRWxlbWVu
dCogY29udGV4dEVsZW1lbnQpOwogICAgIHN0YXRpYyB2b2lkIHN5bmNocm9uaXplUmVxdWlyZWRF
eHRlbnNpb25zKFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudFJhcmVEYXRhLmgJKHJldmlzaW9uIDE5NzYzNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdFbGVtZW50UmFyZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyAr
NzEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgaWYgKCFtX292
ZXJyaWRlQ29tcHV0ZWRTdHlsZSB8fCBtX25lZWRzT3ZlcnJpZGVDb21wdXRlZFN0eWxlVXBkYXRl
KSB7CiAgICAgICAgICAgICAvLyBUaGUgc3R5bGUgY29tcHV0ZWQgaGVyZSBjb250YWlucyBubyBD
U1MgQW5pbWF0aW9ucy9UcmFuc2l0aW9ucyBvciBTTUlMIGluZHVjZWQgcnVsZXMgLSB0aGlzIGlz
IG5lZWRlZCB0byBjb21wdXRlIHRoZSAiYmFzZSB2YWx1ZSIgZm9yIHRoZSBTTUlMIGFuaW1hdGlv
biBzYW5kd2hpY2ggbW9kZWwuCi0gICAgICAgICAgICBtX292ZXJyaWRlQ29tcHV0ZWRTdHlsZSA9
IGVsZW1lbnQuc3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudChlbGVtZW50LCBwYXJlbnRT
dHlsZSwgTWF0Y2hBbGxSdWxlc0V4Y2x1ZGluZ1NNSUwpOworICAgICAgICAgICAgbV9vdmVycmlk
ZUNvbXB1dGVkU3R5bGUgPSBlbGVtZW50LnN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQo
ZWxlbWVudCwgcGFyZW50U3R5bGUsIE1hdGNoQWxsUnVsZXNFeGNsdWRpbmdTTUlMKS5yZW5kZXJT
dHlsZTsKICAgICAgICAgICAgIG1fbmVlZHNPdmVycmlkZUNvbXB1dGVkU3R5bGVVcGRhdGUgPSBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQobV9vdmVycmlkZUNvbXB1dGVkU3R5bGUp
Owo=
</data>
<flag name="review"
          id="297785"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>