<?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>216165</bug_id>
          
          <creation_ts>2020-09-03 20:38:09 -0700</creation_ts>
          <short_desc>[LFC][IFC] Rename LineBuilder to Line</short_desc>
          <delta_ts>2020-09-04 06:00:29 -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>Layout and Rendering</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1685548</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-09-03 20:38:09 -0700</bug_when>
    <thetext>This class is the actual line, LineLayoutContext is the LineBuilder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685549</commentid>
    <comment_count>1</comment_count>
      <attachid>407940</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-09-03 20:43:12 -0700</bug_when>
    <thetext>Created attachment 407940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685617</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-04 05:59:11 -0700</bug_when>
    <thetext>Committed r266603: &lt;https://trac.webkit.org/changeset/266603&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407940.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1685619</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-04 06:00:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/68341268&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407940</attachid>
            <date>2020-09-03 20:43:12 -0700</date>
            <delta_ts>2020-09-04 05:59:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216165-20200903204311.patch</filename>
            <type>text/plain</type>
            <size>99925</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2NTE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjJjM2UzZmQ2NzQzNTI3
ZWRjODE5OWZjYzA1NjUwMjFmZjM0NTk2My4uMDA3MmQ3ZGEwMjU3ZTViNjFmZTRlMzI3MzdjZGQy
YmM2YjMzODE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExMiBAQAorMjAyMC0wOS0wMyAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBMaW5lQnVpbGRl
ciB0byBMaW5lCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMTYxNjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUaGlzIGNsYXNzIGV2b2x2ZWQgdG8gdGhlIGFjdHVhbCBsaW5lIGFuZCBMaW5lTGF5b3V0Q29u
dGV4dCBiZWNhbWUgdGhlIExpbmVCdWlsZGVyLgorCisgICAgICAgICogU291cmNlcy50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGxh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQgY29uc3QpOgorICAgICAgICAqIGxheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVp
cmtzOjpsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyBjb25zdCk6CisgICAgICAgICogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAuCisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlzV2hpdGVzcGFjZVByZXNlcnZlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OkxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lOjp+TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6Om9wZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjbGVhckNvbnRlbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpMaW5lOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmU6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmU6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bW92ZUxvZ2ljYWxMZWZ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZTo6bW92ZUxvZ2ljYWxSaWdodCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmU6OmFwcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmU6OmFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6YXBwZW5kV2l0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6
OmFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6YXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lOjphcHBlbmRJbmxpbmVDb250YWluZXJFbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjphcHBlbmRUZXh0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkxpbmU6OmFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6YXBwZW5kUmVwbGFjZWRJbmxpbmVCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lOjphcHBlbmRMaW5lQnJlYWspOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lOjppc1J1blZpc3VhbGx5Tm9uRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lOjpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmU6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6VHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6VHJpbW1hYmxlVHJh
aWxpbmdDb250ZW50OjphZGRGdWxseVRyaW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OmFkZFBhcnRpYWxseVRy
aW1tYWJsZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpUcmltbWFi
bGVUcmFpbGluZ0NvbnRlbnQ6OnJlbW92ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmU6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6cmVtb3ZlUGFydGlhbGx5VHJpbW1hYmxlQ29u
dGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6UnVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjpleHBhbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lOjpSdW46Omhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6dHJhaWxpbmdMZXR0ZXJTcGFjaW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjpyZW1vdmVUcmFp
bGluZ0xldHRlclNwYWNpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpSdW46
OnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmU6OlJ1bjo6dmlzdWFsbHlDb2xsYXBzZVRyYWlsaW5nV2hpdGVzcGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6c2V0RXhwYW5zaW9uQmVoYXZpb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpSdW46OmV4cGFuc2lvbkJlaGF2aW9yIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6UnVuOjpzZXRIb3Jpem9udGFsRXhwYW5z
aW9uKToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQnVpbGRlci5oLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpzZXRIYXNJbnRy
dXNpdmVGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6Omhhc0ludHJ1c2l2
ZUZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6aXNWaXN1YWxs
eUVtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6bGluZUxvZ2lj
YWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OmNvbnRlbnRM
b2dpY2FsV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphdmFp
bGFibGVXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OnRyaW1t
YWJsZVRyYWlsaW5nV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Ojppc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lOjpSdW46OmlzVGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6OlJ1bjo6aXNCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lOjpSdW46OmlzTGluZUJyZWFrIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZTo6UnVuOjppc0NvbnRhaW5lclN0YXJ0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6UnVuOjppc0NvbnRhaW5lckVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmU6OlJ1bjo6bGF5b3V0Qm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZTo6UnVuOjpzdHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6OlJ1bjo6dGV4dENvbnRlbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpMaW5lOjpSdW46OmxvZ2ljYWxXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmU6OlJ1bjo6bG9naWNhbExlZnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpMaW5lOjpSdW46OmxvZ2ljYWxSaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmU6OlJ1bjo6ZXhwYW5zaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6TGluZTo6UnVuOjpoYXNFeHBhbnNpb25PcHBvcnR1bml0eSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3Vu
dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1bjo6aGFzVHJhaWxp
bmdXaGl0ZXNwYWNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6UnVu
Ojp0cmFpbGluZ1doaXRlc3BhY2VXaWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6OlJ1bjo6bW92ZUhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6OlJ1bjo6c2hyaW5rSG9yaXpvbnRhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6UnVuOjpzZXROZWVkc0h5cGhlbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmU6OlJ1bjo6aGFzQ29sbGFwc2libGVUcmFpbGluZ1doaXRlc3BhY2UgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpSdW46Omhhc0NvbGxhcHNlZFRyYWlsaW5n
V2hpdGVzcGFjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OnJ1bnMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjpjb250ZW50TG9naWNhbFJp
Z2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6VHJpbW1hYmxlVHJh
aWxpbmdDb250ZW50Ojp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmU6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6aXNFbXB0eSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6aXNUcmFpbGlu
Z1J1bkZ1bGx5VHJpbW1hYmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZTo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50Ojppc1RyYWlsaW5nUnVuUGFydGlhbGx5VHJpbW1h
YmxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZTo6VHJpbW1hYmxlVHJh
aWxpbmdDb250ZW50OjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6OlJ1
bjo6dHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OmNvbGxlY3RIYW5naW5nQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Omhvcml6
b250YWxBbGlnbm1lbnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
OjpMaW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6aW5saW5lUmVj
dEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpj
b25zdHJ1Y3RJbmxpbmVCb3hlcyk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5oOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVM
YXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dENv
bnRleHQ6OmxheW91dElubGluZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
TGF5b3V0Q29udGV4dDo6Y29tbWl0RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUxheW91dENvbnRleHQ6OmhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Y29tbWl0UGFydGlhbENvbnRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6cmVidWls
ZExpbmUpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250
ZXh0Lmg6CisKIDIwMjAtMDktMDMgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtJRkNdIEFkZCBzdXBwb3J0IGZvciB2ZXJ0aWNhbC1hbGlnbjogdGV4dC1i
b3R0b20KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQKaW5kZXggZGE1ZjU5ZGM3MTE0NDM3MmIxYmU0NjEwN2E5NzFjZThm
MzQxMjg1MC4uZWViMWQ2MDRhZDRlY2Y3YzIwNDc2MmQ2ZGY0NTdkMDJmZWQwNWIzYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKQEAgLTE0NDUsNyArMTQ0NSw3IEBAIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdTdGF0ZS5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUl0
ZW0uY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCi1sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKK2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUxpbmUuY3BwCiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVUZXh0SXRlbS5jcHAK
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAogbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAyZDFiNDczNmZkZDIxZjgzYjA5
ZmJlNjhiNDNkMWUyNTI1NWI4MDc4Li5kNWU0MGE2YWM4NjMwNzEyMmU3NTlkYTljODRkMDU1OGIz
M2M3YmMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC0yMDU3LDcgKzIwNTcsNyBAQAogCQk2RUQ4QzM3QTE4M0JGRjhDMDA5RTUz
QkQgLyogQm94U2hhcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZFRDhDMzc4MTgzQkZGOEMwMDlFNTNCRCAvKiBCb3hTaGFwZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTZFRThBNzczMTBGODAzRjMw
MDVBNEEyNCAvKiBKU1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZFRThBNzcxMTBGODAzRjMwMDVBNEEyNCAvKiBK
U1dlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCAqLzsgfTsKIAkJNkYwQjk4QjUyM0YyNjhFQzAwRUVD
MkYyIC8qIExheW91dElubGluZVRleHRCb3guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGMEI5OEIzMjNGMjY4RUIwMEVFQzJGMiAvKiBMYXlvdXRJbmxp
bmVUZXh0Qm94LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKLQkJNkYwQ0Q2OTUyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmVCdWlsZGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2RjBDRDY5NDIyOUVE
MzI3MDBDNTk5NEUgLyogSW5saW5lTGluZUJ1aWxkZXIuaCAqLzsgfTsKKwkJNkYwQ0Q2OTUyMjlF
RDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5l
LmggKi87IH07CiAJCTZGMTcyNjRGMjQ3MEM2MEIwMDUxOEM5NiAvKiBUYWJsZVdyYXBwZXJCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2RjE3MjY0RTI0NzBDNjBBMDA1MThDOTYgLyogVGFibGVXcmFwcGVyQmxvY2tG
b3JtYXR0aW5nQ29udGV4dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTZGMUNDMURFMjI1RjhCNDkwMDcyMEFEMiAvKiBJbmxpbmVUZXh0SXRlbS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkYxQ0MxREQy
MjVGOEI0MjAwNzIwQUQyIC8qIElubGluZVRleHRJdGVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNkYyNkJCNkMyMzM0M0U2RjAwMkYyQkVBIC8q
IExheW91dENvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZGMjZCQjZCMjMzNDNFNUIwMDJGMkJFQSAvKiBMYXlvdXRDb250ZXh0LmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk1NTMsOCArOTU1
Myw4IEBACiAJCTZGMDgzMERGMjBCNDY5NTEwMDhBOTQ1QiAvKiBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0R2VvbWV0cnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQmxvY2tGb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkYwQjk4QjMyM0Yy
NjhFQjAwRUVDMkYyIC8qIExheW91dElubGluZVRleHRCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTGF5b3V0SW5saW5lVGV4dEJveC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2RjBCOThCNjIzRjI2OTA2MDBFRUMyRjIgLyogTGF5b3V0SW5saW5lVGV4dEJv
eC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRJbmxpbmVUZXh0Qm94LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkYwQ0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8qIElubGlu
ZUxpbmVCdWlsZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUxpbmVCdWlsZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkYwQ0Q2OTQyMjlFRDMyNzAwQzU5OTRF
IC8qIElubGluZUxpbmVCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IElubGluZUxpbmVCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTZGMENE
NjkyMjI5RUQzMTkwMEM1OTk0RSAvKiBJbmxpbmVMaW5lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IElubGluZUxpbmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2RjBDRDY5NDIy
OUVEMzI3MDBDNTk5NEUgLyogSW5saW5lTGluZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmxpbmVMaW5lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMTBC
MDg2MjJCODU2OEQwMDkwRTY5QyAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGMTcyNjRDMjQ3MEM1RjcwMDUxOEM5NiAvKiBU
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFRhYmxlV3JhcHBlckJsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RjE3MjY0RTI0NzBDNjBBMDA1MThDOTYgLyogVGFibGVXcmFwcGVyQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
YWJsZVdyYXBwZXJCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xNzQ1OCwxMiArMTc0NTgsMTIgQEAKIAkJCQkxMTVDRkE3QzIwOEI4RTEwMDAx
RTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRlLmggKi8sCiAJCQkJNkY3QjhDRUMyMzYyNkU2
NjAwQzlGRjE1IC8qIElubGluZUl0ZW0uY3BwICovLAogCQkJCTZGRTdDRkEwMjE3N0VFRjEwMDVC
MTU3MyAvKiBJbmxpbmVJdGVtLmggKi8sCisJCQkJNkYwQ0Q2OTIyMjlFRDMxOTAwQzU5OTRFIC8q
IElubGluZUxpbmUuY3BwICovLAorCQkJCTZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxp
bmVMaW5lLmggKi8sCiAJCQkJNkY2OUE3OTkyNEQ2RkFCODAwRTZCODVEIC8qIElubGluZUxpbmVC
b3guY3BwICovLAogCQkJCTZGQjI0MDAzMjNERkYxMjcwMDc5NjQ1OCAvKiBJbmxpbmVMaW5lQm94
LmggKi8sCiAJCQkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2Vy
LmNwcCAqLywKIAkJCQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFr
ZXIuaCAqLywKLQkJCQk2RjBDRDY5MjIyOUVEMzE5MDBDNTk5NEUgLyogSW5saW5lTGluZUJ1aWxk
ZXIuY3BwICovLAotCQkJCTZGMENENjk0MjI5RUQzMjcwMEM1OTk0RSAvKiBJbmxpbmVMaW5lQnVp
bGRlci5oICovLAogCQkJCTZGMzYwRTRFMjM5OTk0MjAwMDE1MTJBNyAvKiBJbmxpbmVTb2Z0TGlu
ZUJyZWFrSXRlbS5oICovLAogCQkJCTZGMUNDMURDMjI1RjhCNDEwMDcyMEFEMiAvKiBJbmxpbmVU
ZXh0SXRlbS5jcHAgKi8sCiAJCQkJNkYxQ0MxREQyMjVGOEI0MjAwNzIwQUQyIC8qIElubGluZVRl
eHRJdGVtLmggKi8sCkBAIC0yMzM1Nyw5ICsyMzM1Nyw5IEBACiAJCQkJOTdBQUJEMDkxNEZBMDlE
NTAwNzQ1N0FFIC8qIFdlYlNvY2tldEV4dGVuc2lvblByb2Nlc3Nvci5oICovLAogCQkJCUFBRjVC
N0IxMTUyNEI0QkQwMDA0Q0I0OSAvKiBXZWJTb2NrZXRGcmFtZS5jcHAgKi8sCiAJCQkJOTdBQUJE
MEExNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldEZyYW1lLmggKi8sCi0JCQkJNDFFMTJFOUQy
NEZFNzRFMjAwOTNGRkI0IC8qIFdlYlNvY2tldElkZW50aWZpZXIuaCAqLywKIAkJCQk5N0FBQkQw
QjE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0SGFuZHNoYWtlLmNwcCAqLywKIAkJCQk5N0FB
QkQwQzE0RkEwOUQ1MDA3NDU3QUUgLyogV2ViU29ja2V0SGFuZHNoYWtlLmggKi8sCisJCQkJNDFF
MTJFOUQyNEZFNzRFMjAwOTNGRkI0IC8qIFdlYlNvY2tldElkZW50aWZpZXIuaCAqLywKIAkJCQk5
N0FBQkQxMTE0RkEwOUQ1MDA3NDU3QUUgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwuY3BwICovLAogCQkJCTk3QUFCRDEyMTRGQTA5RDUwMDc0NTdBRSAvKiBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbC5oICovLAogCQkJKTsKQEAgLTMxNjQ0LDkgKzMxNjQ0LDkgQEAK
IAkJCQkxMTVDRkE3RTIwOEI4RTEwMDAxRTY5OTEgLyogSW5saW5lRm9ybWF0dGluZ1N0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2RkU3Q0ZBMjIxNzdFRUYyMDA1QjE1NzMgLyogSW5saW5lSXRl
bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNzg5MTYxMTIwRDYwODAwNjBFQ0U1IC8qIElubGlu
ZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQk2RjBDRDY5NTIyOUVEMzI3MDBDNTk5NEUg
LyogSW5saW5lTGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZCMjQwMDUyM0RGRjEyODAwNzk2
NDU4IC8qIElubGluZUxpbmVCb3guaCBpbiBIZWFkZXJzICovLAogCQkJCTZGRTE5ODE3MjE3ODM5
N0MwMDQ0NkYwOCAvKiBJbmxpbmVMaW5lQnJlYWtlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkYw
Q0Q2OTUyMjlFRDMyNzAwQzU5OTRFIC8qIElubGluZUxpbmVCdWlsZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQlGNDU3NzVDRTI0MTQzN0Q1MDAyREYxQTAgLyogSW5saW5lUGF0aERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTZGMzYwRTUwMjM5OTk0MjEwMDE1MTJBNyAvKiBJbmxpbmVTb2Z0TGlu
ZUJyZWFrSXRlbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUE0QzNBNzcwQjJCMTY3OTAwMjMzNEEy
IC8qIElubGluZVN0eWxlU2hlZXRPd25lci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzAzOSw3ICsz
MzAzOSw2IEBACiAJCQkJMUE1OEU4NjYxRDE5RDRGMDAwQzBFQTczIC8qIFBheW1lbnRDb29yZGlu
YXRvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFGNzZCMzcxRjQ0QzYwRjAwMTRDMzE4
IC8qIFBheW1lbnRDdXJyZW5jeUFtb3VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFGNzZCMUYx
RjQ0QzNGRTAwMTRDMzE4IC8qIFBheW1lbnREZXRhaWxzQmFzZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDFFMTJFOUYyNEZFNzRFMjAwOTNGRkI0IC8qIFdlYlNvY2tldElkZW50aWZpZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExRjc2QjI1MUY0NEM0OTEwMDE0QzMxOCAvKiBQYXltZW50RGV0YWls
c0luaXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExRjc2QjRGMUY0NEQyNDIwMDE0QzMxOCAvKiBQ
YXltZW50RGV0YWlsc01vZGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUY2MDA0OTFGNDc1
OTRFMDA3N0U4M0YgLyogUGF5bWVudERldGFpbHNVcGRhdGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MzQzOTAsNiArMzQzODksNyBAQAogCQkJCTk3QUFCRDI0MTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJT
b2NrZXRFeHRlbnNpb25Qcm9jZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QUFCRDI1MTRG
QTA5RDUwMDc0NTdBRSAvKiBXZWJTb2NrZXRGcmFtZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTdB
QUJEMjcxNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tldEhhbmRzaGFrZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNDFFMTJFOUYyNEZFNzRFMjAwOTNGRkI0IC8qIFdlYlNvY2tldElkZW50aWZpZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTFGODc1NkIyMUUyMkMzMzUwMDQyQzQwRCAvKiBXZWJTUUxp
dGVEYXRhYmFzZVRyYWNrZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTMxREVBNDU2MUIz
OUY0RDkwMEY3NzE3OCAvKiBXZWJTeXN0ZW1CYWNrZHJvcExheWVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjU4MEZBMzE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBp
biBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDc2
ZTc2ZjI0ZWEwMjRlOTk2OGVlMDk1OWVhZWJmYjU2YjA5MjkwOGIuLmI0MGE1ZGNkNWY3ZGIwYjJj
MWUxYzZmZjNjYmNiYmVkZGY3YWM3OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5jcHAKQEAgLTE0MCw3ICsxNDAsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojps
aW5lTGF5b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAg
ICBPcHRpb25hbDx1bnNpZ25lZD4gb3ZlcmZsb3dDb250ZW50TGVuZ3RoOwogICAgIH07CiAgICAg
T3B0aW9uYWw8UHJldmlvdXNMaW5lPiBwcmV2aW91c0xpbmU7Ci0gICAgYXV0byBsaW5lID0gTGlu
ZUJ1aWxkZXIgeyAqdGhpcyB9OworICAgIGF1dG8gbGluZSA9IExpbmUgeyAqdGhpcyB9OwogICAg
IGF1dG8gbGluZUxheW91dENvbnRleHQgPSBMaW5lTGF5b3V0Q29udGV4dCB7ICp0aGlzLCByb290
KCksIGlubGluZUl0ZW1zIH07CiAKICAgICB3aGlsZSAoIW5lZWRzTGF5b3V0UmFuZ2UuaXNFbXB0
eSgpKSB7CkBAIC0yNzAsNyArMjcwLDcgQEAgSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoSW4KIHsKICAg
ICBhdXRvJiBpbmxpbmVJdGVtcyA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1zKCk7CiAg
ICAgYXV0byBtYXhpbXVtTGluZVdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgYXV0
byBsaW5lID0gTGluZUJ1aWxkZXIgeyAqdGhpcyB9OworICAgIGF1dG8gbGluZSA9IExpbmUgeyAq
dGhpcyB9OwogICAgIGF1dG8gbGluZUxheW91dENvbnRleHQgPSBMaW5lTGF5b3V0Q29udGV4dCB7
ICp0aGlzLCByb290KCksIGlubGluZUl0ZW1zIH07CiAgICAgYXV0byBsYXlvdXRSYW5nZSA9IExp
bmVMYXlvdXRDb250ZXh0OjpJbmxpbmVJdGVtUmFuZ2UgeyAwICwgaW5saW5lSXRlbXMuc2l6ZSgp
IH07CiAgICAgd2hpbGUgKCFsYXlvdXRSYW5nZS5pc0VtcHR5KCkpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250
ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dC5oCmluZGV4IDgxN2FjZWIzMjc3YTBmNDAyZWU0M2RmNTE5YWE0MTc2MmYy
YWM5MDYuLjUyY2E4MzVjOTg3MzUzN2QyZGE1MzZlMmNiNjcwMGNmNWRmMDFiZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaApAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAKICAg
ICBjbGFzcyBRdWlya3MgOiBwdWJsaWMgRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrcyB7CiAgICAg
cHVibGljOgotICAgICAgICBib29sIGxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExp
bmVCdWlsZGVyOjpSdW5MaXN0JikgY29uc3Q7CisgICAgICAgIGJvb2wgbGluZURlc2NlbnROZWVk
c0NvbGxhcHNpbmcoY29uc3QgTGluZTo6UnVuTGlzdCYpIGNvbnN0OwogICAgICAgICBJbmxpbmVM
YXlvdXRVbml0IGluaXRpYWxMaW5lSGVpZ2h0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHRRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmluZGV4IDAxN2JjN2Q0
MGUzNDBjMTFmYTYwZTY5YjAyMDA1MWI4ZDUzMjU0ZDkuLjlmY2NhZWJiOWZhZjU2NjM4Yzg4ZWM5
YTFmMGNkYWY1OWY3MmI2MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dFF1aXJrcy5jcHAKQEAgLTMzLDcgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVz
cGFjZSBMYXlvdXQgewogCi1ib29sIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6Omxp
bmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5M
aXN0KSBjb25zdAorYm9vbCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtzOjpsaW5lRGVz
Y2VudE5lZWRzQ29sbGFwc2luZyhjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5MaXN0KSBjb25zdAog
ewogICAgIC8vIENvbGxhcHNlIGxpbmUgZGVzY2VudCBpbiBsaW1pdGVkIGFuZCBmdWxsIHF1aXJr
IG1vZGUgd2hlbiB0aGVyZSdzIG5vIGJhc2VsaW5lIGFsaWduZWQgY29udGVudCBvcgogICAgIC8v
IHRoZSBiYXNlbGluZSBhbGlnbmVkIGNvbnRlbnQgaGFzIG5vIGRlc2NlbnQuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjliZjkyNGVhOTIxM2RjNTJkZmIxMzExYmU2ZjMwMDc0YTkwZTE1NzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lLmNwcApAQCAtMCwwICsxLDU4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbmxpbmVMaW5lLmgiCisKKyNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1B
VFRJTkdfQ09OVEVYVCkKKworI2luY2x1ZGUgIklubGluZUZvcm1hdHRpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiSW5saW5lU29mdExpbmVCcmVha0l0ZW0uaCIKKyNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiVGV4dEZsYWdzLmgiCisjaW5jbHVkZSAiVGV4dFV0
aWwuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgTGF5b3V0IHsKKworc3RhdGljIGlubGluZSBib29sIGlzV2hpdGVz
cGFjZVByZXNlcnZlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgYXV0byB3aGl0
ZXNwYWNlID0gc3R5bGUud2hpdGVTcGFjZSgpOworICAgIHJldHVybiB3aGl0ZXNwYWNlID09IFdo
aXRlU3BhY2U6OlByZSB8fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZVdyYXAgfHwgd2hp
dGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpCcmVha1NwYWNlczsKK30KKworTGluZTo6TGluZShjb25z
dCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAg
OiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAg
ICwgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQobV9ydW5zKQorICAgICwgbV9zaG91bGRJZ25v
cmVUcmFpbGluZ0xldHRlclNwYWNpbmcoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKQorewor
fQorCitMaW5lOjp+TGluZSgpCit7Cit9CisKK3ZvaWQgTGluZTo6b3BlbihJbmxpbmVMYXlvdXRV
bml0IGF2YWlsYWJsZVdpZHRoKQoreworICAgIG1fbGluZUxvZ2ljYWxXaWR0aCA9IGF2YWlsYWJs
ZVdpZHRoOworICAgIGNsZWFyQ29udGVudCgpOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9p
c0Nsb3NlZCA9IGZhbHNlOworI2VuZGlmCit9CisKK3ZvaWQgTGluZTo6Y2xlYXJDb250ZW50KCkK
K3sKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggPSB7IH07CisgICAgbV9pc1Zpc3VhbGx5RW1w
dHkgPSB0cnVlOworICAgIG1fcnVucy5jbGVhcigpOworICAgIG1fdHJpbW1hYmxlVHJhaWxpbmdD
b250ZW50LnJlc2V0KCk7CisgICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxl
VHJhaWxpbmdDb250ZW50ID0geyB9OworfQorCit2b2lkIExpbmU6OmNsb3NlKGJvb2wgaXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KQoreworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9pc0Ns
b3NlZCA9IHRydWU7CisjZW5kaWYKKyAgICByZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQo
KTsKKyAgICB2aXN1YWxseUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpOworCisgICAg
YXV0byBjb21wdXRlRXhwYW5zaW9uRm9yUnVuc0lmTmVlZGVkID0gWyZdIHsKKyAgICAgICAgaWYg
KGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCkgIT0gVGV4dEFs
aWduTW9kZTo6SnVzdGlmeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gVGV4dCBp
cyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0ZXh0
LWp1c3RpZnkgcHJvcGVydHksCisgICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmlsbCB0
aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24tbGFz
dCwKKyAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhl
IGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAgICAgaWYgKGlzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG1f
cnVucy5pc0VtcHR5KCkgfHwgbV9ydW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IDA7
CisgICAgICAgIFJ1biogbGFzdFJ1bldpdGhDb250ZW50ID0gbnVsbHB0cjsKKyAgICAgICAgLy8g
Q29sbGVjdCBhbmQgZGlzdHJpYnV0ZSB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXRpZXMuCisgICAg
ICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgICAgICBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50ICs9IHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7CisgICAgICAg
ICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQorICAgICAgICAgICAgICAgIGxh
c3RSdW5XaXRoQ29udGVudCA9ICZydW47CisgICAgICAgIH0KKyAgICAgICAgLy8gTmVlZCB0byBm
aXggdXAgdGhlIGxhc3QgcnVuJ3MgdHJhaWxpbmcgZXhwYW5zaW9uLgorICAgICAgICBpZiAobGFz
dFJ1bldpdGhDb250ZW50ICYmIGxhc3RSdW5XaXRoQ29udGVudC0+aGFzRXhwYW5zaW9uT3Bwb3J0
dW5pdHkoKSkgeworICAgICAgICAgICAgLy8gVHVybiBvZmYgdGhlIHRyYWlsaW5nIGJpdHMgZmly
c3QgYW5kIGFkZCB0aGUgZm9yYmlkIHRyYWlsaW5nIGV4cGFuc2lvbi4KKyAgICAgICAgICAgIGF1
dG8gbGVhZGluZ0V4cGFuc2lvbiA9IGxhc3RSdW5XaXRoQ29udGVudC0+ZXhwYW5zaW9uQmVoYXZp
b3IoKSAmIExlZnRFeHBhbnNpb25NYXNrOworICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50
LT5zZXRFeHBhbnNpb25CZWhhdmlvcihsZWFkaW5nRXhwYW5zaW9uIHwgRm9yYmlkUmlnaHRFeHBh
bnNpb24pOworICAgICAgICB9CisgICAgICAgIC8vIEFueXRoaW5nIHRvIGRpc3RyaWJ1dGU/Cisg
ICAgICAgIGlmIChleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICYmIGF2YWlsYWJsZVdpZHRoKCkp
IHsKKyAgICAgICAgICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlLgorICAgICAgICAg
ICAgYXV0byBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCgpIC8gZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudDsKKyAgICAgICAgICAgIGF1dG8gYWNjdW11bGF0ZWRFeHBhbnNp
b24gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgcnVuIDog
bV9ydW5zKSB7CisgICAgICAgICAgICAgICAgLy8gRXhwYW5kIGFuZCBtb3ZlIHJ1bnMgYnkgdGhl
IGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KKyAgICAgICAgICAgICAgICBydW4ubW92ZUhvcml6b250
YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7CisgICAgICAgICAgICAgICAgaWYgKCFydW4uaGFz
RXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOwor
ICAgICAgICAgICAgICAgIGF1dG8gY29tcHV0ZWRFeHBhbnNpb24gPSBleHBhbnNpb25Ub0Rpc3Ry
aWJ1dGUgKiBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBDaGVjayB3aHkgd2UgbmVlZCB0byBzZXQgYm90aC4KKyAgICAgICAgICAgICAg
ICBydW4uc2V0SG9yaXpvbnRhbEV4cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7CisgICAgICAg
ICAgICAgICAgcnVuLnNocmlua0hvcml6b250YWxseSgtY29tcHV0ZWRFeHBhbnNpb24pOworICAg
ICAgICAgICAgICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGNvbXB1dGVkRXhwYW5zaW9uOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBjb21wdXRlRXhwYW5zaW9uRm9y
UnVuc0lmTmVlZGVkKCk7Cit9CisKK3ZvaWQgTGluZTo6cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVD
b250ZW50KCkKK3sKKyAgICBpZiAobV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQuaXNFbXB0eSgp
IHx8IG1fcnVucy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIENvbXBsZXgg
bGluZSBsYXlvdXQgcXVpcms6IGtlZXAgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYXJvdW5kIHdo
ZW4gaXQgaXMgZm9sbG93ZWQgYnkgYSBsaW5lIGJyZWFrLCB1bmxlc3MgdGhlIGNvbnRlbnQgb3Zl
cmZsb3dzIHRoZSBsaW5lLgorICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpIHsK
KyAgICAgICAgYXV0byBpc1RleHRBbGlnblJpZ2h0ID0gWyZdIHsKKyAgICAgICAgICAgIGF1dG8g
dGV4dEFsaWduID0gZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCkuc3R5bGUoKS50ZXh0QWxpZ24o
KTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6UmlnaHQK
KyAgICAgICAgICAgICAgICB8fCB0ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6V2ViS2l0Umln
aHQKKyAgICAgICAgICAgICAgICB8fCB0ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6RW5kOwor
ICAgICAgICAgICAgfSgpOworCisgICAgICAgIGlmIChtX3J1bnMubGFzdCgpLmlzTGluZUJyZWFr
KCkgJiYgYXZhaWxhYmxlV2lkdGgoKSA+PSAwICYmICFpc1RleHRBbGlnblJpZ2h0KSB7CisgICAg
ICAgICAgICBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5yZXNldCgpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb250ZW50TG9naWNhbFdpZHRoIC09
IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LnJlbW92ZSgpOworICAgIC8vIElmIHdlIHJlbW92
ZWQgdGhlIGZpcnN0IHZpc2libGUgcnVuIG9uIHRoZSBsaW5lLCB3ZSBuZWVkIHRvIHJlLWNoZWNr
IHRoZSB2aXNpYmlsaXR5IHN0YXR1cy4KKyAgICBpZiAobV9saW5lSXNWaXN1YWxseUVtcHR5QmVm
b3JlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KSB7CisgICAgICAgIC8vIEp1c3QgYmVjYXVzZSB0
aGUgbGluZSB3YXMgdmlzdWFsbHkgZW1wdHkgYmVmb3JlIHRoZSByZW1vdmVkIGNvbnRlbnQsIGl0
IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQgaXMgc3RpbGwgdmlzdWFsbHkgZW1wdHkuCisg
ICAgICAgIC8vIDxzcGFuPiAgPC9zcGFuPjxzcGFuIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDEwcHgi
Pjwvc3Bhbj4gIDwtIG5vbi1lbXB0eQorICAgICAgICBhdXRvIGxpbmVJc1Zpc3VhbGx5RW1wdHkg
PSBbJl0geworICAgICAgICAgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaXNSdW5WaXN1YWxseU5vbkVtcHR5KHJ1bikpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9OworICAgICAgICAvLyBXZSBjb3VsZCBvbmx5IGdvIGZyb20gdmlzdWFsbHkg
bm9uIGVtcHR5IC0+IHRvIHZpc3VhbGx5IGVtcHR5LiBUcmltbWVkIHJ1bnMgc2hvdWxkIG5ldmVy
IG1ha2UgdGhlIGxpbmUgdmlzaWJsZS4KKyAgICAgICAgbV9pc1Zpc3VhbGx5RW1wdHkgPSBsaW5l
SXNWaXN1YWxseUVtcHR5KCk7CisgICAgICAgIG1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRy
aW1tYWJsZVRyYWlsaW5nQ29udGVudCA9IHsgfTsKKyAgICB9Cit9CisKK3ZvaWQgTGluZTo6dmlz
dWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKQoreworICAgIEFTU0VSVChtX3Ry
aW1tYWJsZVRyYWlsaW5nQ29udGVudC5pc0VtcHR5KCkpOworICAgIC8vIElmIHdoaXRlLXNwYWNl
IGlzIHNldCB0byBwcmUtd3JhcCwgdGhlIFVBIG11c3QKKyAgICAvLyAuLi4KKyAgICAvLyBJdCBt
YXkgYWxzbyB2aXN1YWxseSBjb2xsYXBzZSB0aGUgY2hhcmFjdGVyIGFkdmFuY2Ugd2lkdGhzIG9m
IGFueSB0aGF0IHdvdWxkIG90aGVyd2lzZSBvdmVyZmxvdy4KKyAgICBhdXRvIG92ZXJmbG93V2lk
dGggPSAtYXZhaWxhYmxlV2lkdGgoKTsKKyAgICBpZiAob3ZlcmZsb3dXaWR0aCA8PSAwKQorICAg
ICAgICByZXR1cm47CisgICAgLy8gTGV0J3MganVzdCBmaW5kIHRoZSB0cmFpbGluZyBwcmUtd3Jh
cCB3aGl0ZXNwYWNlIGNvbnRlbnQgZm9yIG5vdyAoZS5nIGNoZWNrIGlmIHRoZXJlIGFyZSBtdWx0
aXBsZSB0cmFpbGluZyBydW5zIHdpdGgKKyAgICAvLyBkaWZmZXJlbnQgc2V0IG9mIHdoaXRlLXNw
YWNlIHZhbHVlcyBhbmQgZGVjaWRlIGlmIHRoZSBpbi1iZXR3ZWVuIHByZS13cmFwIGNvbnRlbnQg
c2hvdWxkIGJlIGNvbGxhcHNlZCBhcyB3ZWxsLikKKyAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1t
ZWRDb250ZW50V2lkdGggPSAwOworICAgIGZvciAoYXV0byYgcnVuIDogV1RGOjptYWtlUmV2ZXJz
ZWRSYW5nZShtX3J1bnMpKSB7CisgICAgICAgIGlmIChydW4uc3R5bGUoKS53aGl0ZVNwYWNlKCkg
IT0gV2hpdGVTcGFjZTo6UHJlV3JhcCkgeworICAgICAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50
ZXJlc3RlZCBpbiBwcmUtd3JhcCB0cmFpbGluZyBjb250ZW50LgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgYXV0byBwcmVXcmFwVmlzdWFsbHlDb2xsYXBzaWJsZUlubGlu
ZUl0ZW0gPSBydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1bi5pc0NvbnRhaW5lckVuZCgpIHx8
IHJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgaWYgKCFwcmVXcmFwVmlzdWFs
bHlDb2xsYXBzaWJsZUlubGluZUl0ZW0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgQVNT
RVJUKCFydW4uaGFzQ29sbGFwc2libGVUcmFpbGluZ1doaXRlc3BhY2UoKSk7CisgICAgICAgIElu
bGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGggPSB7IH07CisgICAgICAgIGlmIChydW4uaXNU
ZXh0KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWx3YXlzIGNvbGxhcHNl
IHRoZSBydW4gYXQgYSBnbHlwaCBib3VuZGFyeSBhcyB0aGUgc3BlYyBpbmRpY2F0ZXM6ICJjb2xs
YXBzZSB0aGUgY2hhcmFjdGVyIGFkdmFuY2Ugd2lkdGhzIG9mIGFueSB0aGF0IHdvdWxkIG90aGVy
d2lzZSBvdmVyZmxvdyIKKyAgICAgICAgICAgIC8vIGFuZCB0aGUgdHJpbW1lZCB3aWR0aCBzaG91
bGQgYmUgY2FwcGVkIGF0IHN0ZDo6bWluKHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgpLCBv
dmVyZmxvd1dpZHRoKSBmb3IgdGV4dCBydW5zLiBCb3RoIEZGIGFuZCBDaHJvbWUgYWdyZWUuCisg
ICAgICAgICAgICB0cmltbWFibGVXaWR0aCA9IHJ1bi50cmFpbGluZ1doaXRlc3BhY2VXaWR0aCgp
OworICAgICAgICAgICAgcnVuLnZpc3VhbGx5Q29sbGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyaW1tYWJsZVdpZHRoID0gcnVuLmxvZ2lj
YWxXaWR0aCgpOworICAgICAgICAgICAgcnVuLnNocmlua0hvcml6b250YWxseSh0cmltbWFibGVX
aWR0aCk7CisgICAgICAgIH0KKyAgICAgICAgdHJpbW1lZENvbnRlbnRXaWR0aCArPSB0cmltbWFi
bGVXaWR0aDsKKyAgICAgICAgb3ZlcmZsb3dXaWR0aCAtPSB0cmltbWFibGVXaWR0aDsKKyAgICAg
ICAgaWYgKG92ZXJmbG93V2lkdGggPD0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggLT0gdHJpbW1lZENvbnRlbnRXaWR0aDsKK30KKwordm9p
ZCBMaW5lOjptb3ZlTG9naWNhbExlZnQoSW5saW5lTGF5b3V0VW5pdCBkZWx0YSkKK3sKKyAgICBp
ZiAoIWRlbHRhKQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKGRlbHRhID4gMCk7CisgICAg
bV9saW5lTG9naWNhbExlZnQgKz0gZGVsdGE7CisgICAgbV9saW5lTG9naWNhbFdpZHRoIC09IGRl
bHRhOworfQorCit2b2lkIExpbmU6Om1vdmVMb2dpY2FsUmlnaHQoSW5saW5lTGF5b3V0VW5pdCBk
ZWx0YSkKK3sKKyAgICBBU1NFUlQoZGVsdGEgPiAwKTsKKyAgICBtX2xpbmVMb2dpY2FsV2lkdGgg
LT0gZGVsdGE7Cit9CisKK3ZvaWQgTGluZTo6YXBwZW5kKGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQoreworICAgIEFTU0VSVCghbV9p
c0Nsb3NlZCk7CisgICAgYXBwZW5kV2l0aChpbmxpbmVJdGVtLCB7IGxvZ2ljYWxXaWR0aCwgZmFs
c2UgfSk7Cit9CisKK3ZvaWQgTGluZTo6YXBwZW5kUGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0oY29u
c3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aCwgYm9vbCBuZWVkc0h5cGhlbikKK3sKKyAgICBhcHBlbmRXaXRoKGlubGluZVRleHRJ
dGVtLCB7IGxvZ2ljYWxXaWR0aCwgbmVlZHNIeXBoZW4gfSk7Cit9CisKK3ZvaWQgTGluZTo6YXBw
ZW5kV2l0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBjb25zdCBJbmxpbmVSdW5EZXRh
aWxzJiBpbmxpbmVSdW5EZXRhaWxzKQoreworICAgIGlmIChpbmxpbmVJdGVtLmlzVGV4dCgpKQor
ICAgICAgICBhcHBlbmRUZXh0Q29udGVudChkb3duY2FzdDxJbmxpbmVUZXh0SXRlbT4oaW5saW5l
SXRlbSksIGlubGluZVJ1bkRldGFpbHMubG9naWNhbFdpZHRoLCBpbmxpbmVSdW5EZXRhaWxzLm5l
ZWRzSHlwaGVuKTsKKyAgICBlbHNlIGlmIChpbmxpbmVJdGVtLmlzTGluZUJyZWFrKCkpCisgICAg
ICAgIGFwcGVuZExpbmVCcmVhayhpbmxpbmVJdGVtKTsKKyAgICBlbHNlIGlmIChpbmxpbmVJdGVt
LmlzQ29udGFpbmVyU3RhcnQoKSkKKyAgICAgICAgYXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQo
aW5saW5lSXRlbSwgaW5saW5lUnVuRGV0YWlscy5sb2dpY2FsV2lkdGgpOworICAgIGVsc2UgaWYg
KGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgYXBwZW5kSW5saW5lQ29udGFp
bmVyRW5kKGlubGluZUl0ZW0sIGlubGluZVJ1bkRldGFpbHMubG9naWNhbFdpZHRoKTsKKyAgICBl
bHNlIGlmIChpbmxpbmVJdGVtLmxheW91dEJveCgpLmlzUmVwbGFjZWRCb3goKSkKKyAgICAgICAg
YXBwZW5kUmVwbGFjZWRJbmxpbmVCb3goaW5saW5lSXRlbSwgaW5saW5lUnVuRGV0YWlscy5sb2dp
Y2FsV2lkdGgpOworICAgIGVsc2UgaWYgKGlubGluZUl0ZW0uaXNCb3goKSkKKyAgICAgICAgYXBw
ZW5kTm9uUmVwbGFjZWRJbmxpbmVCb3goaW5saW5lSXRlbSwgaW5saW5lUnVuRGV0YWlscy5sb2dp
Y2FsV2lkdGgpOworICAgIGVsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAg
ICAvLyBDaGVjayBpZiB0aGlzIGZyZXNobHkgYXBwZW5kZWQgY29udGVudCBtYWtlcyB0aGUgbGlu
ZSB2aXN1YWxseSBub24tZW1wdHkuCisgICAgaWYgKG1faXNWaXN1YWxseUVtcHR5ICYmICFtX3J1
bnMuaXNFbXB0eSgpICYmIGlzUnVuVmlzdWFsbHlOb25FbXB0eShtX3J1bnMubGFzdCgpKSkKKyAg
ICAgICAgbV9pc1Zpc3VhbGx5RW1wdHkgPSBmYWxzZTsKK30KKwordm9pZCBMaW5lOjphcHBlbmRO
b25CcmVha2FibGVTcGFjZShjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKK3sKKyAg
ICBtX3J1bnMuYXBwZW5kKHsgaW5saW5lSXRlbSwgbG9naWNhbExlZnQsIGxvZ2ljYWxXaWR0aCB9
KTsKKyAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gbG9naWNhbFdpZHRoOworfQorCit2b2lk
IExpbmU6OmFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0KGNvbnN0IElubGluZUl0ZW0mIGlubGlu
ZUl0ZW0sIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKQoreworICAgIC8vIFRoaXMgaXMg
cmVhbGx5IGp1c3QgYSBwbGFjZWhvbGRlciB0byBtYXJrIHRoZSBzdGFydCBvZiB0aGUgaW5saW5l
IGxldmVsIGNvbnRhaW5lciA8c3Bhbj4uCisgICAgYXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoaW5s
aW5lSXRlbSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsV2lkdGgpOworfQorCit2b2lk
IExpbmU6OmFwcGVuZElubGluZUNvbnRhaW5lckVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKK3sKKyAgICAvLyBUaGlzIGlzIHJl
YWxseSBqdXN0IGEgcGxhY2Vob2xkZXIgdG8gbWFyayB0aGUgZW5kIG9mIHRoZSBpbmxpbmUgbGV2
ZWwgY29udGFpbmVyIDwvc3Bhbj4uCisgICAgYXV0byByZW1vdmVUcmFpbGluZ0xldHRlclNwYWNp
bmcgPSBbJl0geworICAgICAgICBpZiAoIW1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmlzVHJh
aWxpbmdSdW5QYXJ0aWFsbHlUcmltbWFibGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9jb250ZW50TG9naWNhbFdpZHRoIC09IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LnJl
bW92ZVBhcnRpYWxseVRyaW1tYWJsZUNvbnRlbnQoKTsKKyAgICB9OworICAgIC8vIFByZXZlbnQg
dHJhaWxpbmcgbGV0dGVyLXNwYWNpbmcgZnJvbSBzcGlsbGluZyBvdXQgb2YgdGhlIGlubGluZSBj
b250YWluZXIuCisgICAgLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10ZXh0LTMvI2xl
dHRlci1zcGFjaW5nLXByb3BlcnR5IFNlZSBleGFtcGxlIDIxLgorICAgIHJlbW92ZVRyYWlsaW5n
TGV0dGVyU3BhY2luZygpOworICAgIGFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0ZW0s
IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwgbG9naWNhbFdpZHRoKTsKK30KKwordm9pZCBMaW5lOjph
cHBlbmRUZXh0Q29udGVudChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIElu
bGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIG5lZWRzSHlwaGVuKQoreworICAgIGF1
dG8gd2lsbENvbGxhcHNlQ29tcGxldGVseSA9IFsmXSB7CisgICAgICAgIGlmICghaW5saW5lVGV4
dEl0ZW0uaXNDb2xsYXBzaWJsZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoaW5saW5lVGV4dEl0ZW0uaXNFbXB0eUNvbnRlbnQoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAvLyBDaGVjayBpZiB0aGUgbGFzdCBpdGVtIGlzIGNvbGxhcHNlZCBh
cyB3ZWxsLgorICAgICAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2Uo
bV9ydW5zKSkgeworICAgICAgICAgICAgaWYgKHJ1bi5pc0JveCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9j
c3MtdGV4dC0zLyN3aGl0ZS1zcGFjZS1waGFzZS0xCisgICAgICAgICAgICAvLyBBbnkgY29sbGFw
c2libGUgc3BhY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIGFub3RoZXIgY29sbGFwc2libGUgc3Bh
Y2XigJRldmVuIG9uZSBvdXRzaWRlIHRoZSBib3VuZGFyeSBvZiB0aGUgaW5saW5lIGNvbnRhaW5p
bmcgdGhhdCBzcGFjZSwKKyAgICAgICAgICAgIC8vIHByb3ZpZGVkIGJvdGggc3BhY2VzIGFyZSB3
aXRoaW4gdGhlIHNhbWUgaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dOKAlGlzIGNvbGxhcHNlZCB0
byBoYXZlIHplcm8gYWR2YW5jZSB3aWR0aC4KKyAgICAgICAgICAgIC8vIDogIjxzcGFuPiAgPC9z
cGFuPiAiIDwtIHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGNvbGxhcHNlcyBjb21wbGV0ZWx5Lgor
ICAgICAgICAgICAgLy8gTm90IHRoYXQgd2hlbiB0aGUgaW5saW5lIGNvbnRhaW5lciBoYXMgcHJl
c2VydmUgd2hpdGVzcGFjZSBzdHlsZSwgIjxzcGFuIHN0eWxlPSJ3aGl0ZS1zcGFjZTogcHJlIj4g
IDwvc3Bhbj4gIiA8LSB0aGlzIHdoaXRlc3BhY2Ugc3RheXMgYXJvdW5kLgorICAgICAgICAgICAg
aWYgKHJ1bi5pc1RleHQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gcnVuLmhhc0NvbGxhcHNp
YmxlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICBBU1NFUlQocnVuLmlzQ29udGFp
bmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSk7CisgICAgICAgIH0KKyAgICAgICAg
Ly8gTGVhZGluZyB3aGl0ZXNwYWNlLgorICAgICAgICByZXR1cm4gIWlzV2hpdGVzcGFjZVByZXNl
cnZlZChpbmxpbmVUZXh0SXRlbS5zdHlsZSgpKTsKKyAgICB9OworCisgICAgaWYgKHdpbGxDb2xs
YXBzZUNvbXBsZXRlbHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBpbmxpbmVUZXh0
SXRlbU5lZWRzTmV3UnVuID0gdHJ1ZTsKKyAgICBpZiAoIW1fcnVucy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgYXV0byYgbGFzdFJ1biA9IG1fcnVucy5sYXN0KCk7CisgICAgICAgIGlubGluZVRleHRJ
dGVtTmVlZHNOZXdSdW4gPSBsYXN0UnVuLmhhc0NvbGxhcHNlZFRyYWlsaW5nV2hpdGVzcGFjZSgp
IHx8ICFsYXN0UnVuLmlzVGV4dCgpIHx8ICZsYXN0UnVuLmxheW91dEJveCgpICE9ICZpbmxpbmVU
ZXh0SXRlbS5sYXlvdXRCb3goKTsKKyAgICAgICAgaWYgKCFpbmxpbmVUZXh0SXRlbU5lZWRzTmV3
UnVuKSB7CisgICAgICAgICAgICBsYXN0UnVuLmV4cGFuZChpbmxpbmVUZXh0SXRlbSwgbG9naWNh
bFdpZHRoKTsKKyAgICAgICAgICAgIGlmIChuZWVkc0h5cGhlbikgeworICAgICAgICAgICAgICAg
IEFTU0VSVCghbGFzdFJ1bi50ZXh0Q29udGVudCgpLT5uZWVkc0h5cGhlbigpKTsKKyAgICAgICAg
ICAgICAgICBsYXN0UnVuLnNldE5lZWRzSHlwaGVuKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgaWYgKGlubGluZVRleHRJdGVtTmVlZHNOZXdSdW4pCisgICAgICAgIG1f
cnVucy5hcHBlbmQoeyBpbmxpbmVUZXh0SXRlbSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCBsb2dp
Y2FsV2lkdGgsIG5lZWRzSHlwaGVuIH0pOworICAgIG1fY29udGVudExvZ2ljYWxXaWR0aCArPSBs
b2dpY2FsV2lkdGg7CisgICAgLy8gU2V0IHRoZSB0cmFpbGluZyB0cmltbWFibGUgY29udGVudC4K
KyAgICBpZiAoaW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkgJiYgIVRleHRVdGlsOjpzaG91
bGRQcmVzZXJ2ZVRyYWlsaW5nV2hpdGVzcGFjZShpbmxpbmVUZXh0SXRlbS5zdHlsZSgpKSkgewor
ICAgICAgICBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5hZGRGdWxseVRyaW1tYWJsZUNvbnRl
bnQobV9ydW5zLnNpemUoKSAtIDEsIGxvZ2ljYWxXaWR0aCk7CisgICAgICAgIC8vIElmIHdlIGV2
ZXIgdHJpbSB0aGlzIGNvbnRlbnQsIHdlIG5lZWQgdG8ga25vdyBpZiB0aGUgbGluZSB2aXNpYmls
aXR5IHN0YXRlIG5lZWRzIHRvIGJlIHJlY29tcHV0ZWQuCisgICAgICAgIGlmIChtX3RyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudC5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2xpbmVJc1Zpc3VhbGx5
RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgPSBpc1Zpc3VhbGx5RW1wdHkoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBBbnkgbm9uLXdoaXRlc3BhY2UsIG5vLXRy
aW1tYWJsZSBjb250ZW50IHJlc2V0cyB0aGUgZXhpc3RpbmcgdHJpbW1hYmxlLgorICAgIG1fdHJp
bW1hYmxlVHJhaWxpbmdDb250ZW50LnJlc2V0KCk7CisgICAgaWYgKCFtX3Nob3VsZElnbm9yZVRy
YWlsaW5nTGV0dGVyU3BhY2luZyAmJiAhaW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkgJiYg
aW5saW5lVGV4dEl0ZW0uc3R5bGUoKS5sZXR0ZXJTcGFjaW5nKCkgPiAwKQorICAgICAgICBtX3Ry
aW1tYWJsZVRyYWlsaW5nQ29udGVudC5hZGRQYXJ0aWFsbHlUcmltbWFibGVDb250ZW50KG1fcnVu
cy5zaXplKCkgLSAxLCBsb2dpY2FsV2lkdGgpOworfQorCit2b2lkIExpbmU6OmFwcGVuZE5vblJl
cGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91
dFVuaXQgbG9naWNhbFdpZHRoKQoreworICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUl0ZW0u
bGF5b3V0Qm94KCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgYXV0byBob3Jpem9udGFsTWFyZ2luID0g
Ym94R2VvbWV0cnkuaG9yaXpvbnRhbE1hcmdpbigpOworICAgIG1fcnVucy5hcHBlbmQoeyBpbmxp
bmVJdGVtLCBjb250ZW50TG9naWNhbFdpZHRoKCkgKyBob3Jpem9udGFsTWFyZ2luLnN0YXJ0LCBs
b2dpY2FsV2lkdGggfSk7CisgICAgbV9jb250ZW50TG9naWNhbFdpZHRoICs9IGxvZ2ljYWxXaWR0
aCArIGhvcml6b250YWxNYXJnaW4uc3RhcnQgKyBob3Jpem9udGFsTWFyZ2luLmVuZDsKKyAgICBt
X3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC5yZXNldCgpOworfQorCit2b2lkIExpbmU6OmFwcGVu
ZFJlcGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFdpZHRoKQoreworICAgIEFTU0VSVChpbmxpbmVJdGVtLmxheW91dEJv
eCgpLmlzUmVwbGFjZWRCb3goKSk7CisgICAgLy8gRklYTUU6IFN1cmVseSByZXBsYWNlZCBib3hl
cyBiZWhhdmUgZGlmZmVyZW50bHkuCisgICAgYXBwZW5kTm9uUmVwbGFjZWRJbmxpbmVCb3goaW5s
aW5lSXRlbSwgbG9naWNhbFdpZHRoKTsKK30KKwordm9pZCBMaW5lOjphcHBlbmRMaW5lQnJlYWso
Y29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkKK3sKKyAgICBpZiAoaW5saW5lSXRlbS5pc0hh
cmRMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIG1fcnVucy5hcHBlbmQoeyBpbmxpbmVJdGVt
LCBjb250ZW50TG9naWNhbFdpZHRoKCksIDBfbHUgfSk7CisgICAgLy8gU29mdCBsaW5lIGJyZWFr
cyAocHJlc2VydmVkIG5ldyBsaW5lIGNoYXJhY3RlcnMpIHJlcXVpcmUgaW5saW5lIHRleHQgYm94
ZXMgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KKyAgICBBU1NFUlQoaW5saW5lSXRlbS5pc1Nv
ZnRMaW5lQnJlYWsoKSk7CisgICAgbV9ydW5zLmFwcGVuZCh7IGRvd25jYXN0PElubGluZVNvZnRM
aW5lQnJlYWtJdGVtPihpbmxpbmVJdGVtKSwgY29udGVudExvZ2ljYWxXaWR0aCgpIH0pOworfQor
Citib29sIExpbmU6OmlzUnVuVmlzdWFsbHlOb25FbXB0eShjb25zdCBSdW4mIHJ1bikgY29uc3QK
K3sKKyAgICBpZiAocnVuLmlzVGV4dCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChydW4uaXNMaW5lQnJlYWsoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBpbmxpbmUgY29udGFpbmVyIGhh
cyBjb250ZW50LiBJdCBzaW1wbHkgY2hlY2tzIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGNv
bnNpZGVyZWQgbm9uLWVtcHR5LgorICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpIHx8IHJ1
bi5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgIGlmICghcnVuLmxvZ2ljYWxXaWR0aCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBNYXJnaW4gZG9lcyBub3QgbWFr
ZSB0aGUgY29udGFpbmVyIHZpc3VhbGx5IG5vbi1lbXB0eS4gQ2hlY2sgaWYgaXQgaGFzIGJvcmRl
ciBvciBwYWRkaW5nLgorICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250
ZXh0KCkuZ2VvbWV0cnlGb3JCb3gocnVuLmxheW91dEJveCgpKTsKKyAgICAgICAgaWYgKHJ1bi5p
c0NvbnRhaW5lclN0YXJ0KCkpCisgICAgICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkuYm9yZGVy
TGVmdCgpIHx8IChib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpICYmIGJveEdlb21ldHJ5LnBhZGRp
bmdMZWZ0KCkudmFsdWUoKSk7CisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5ib3JkZXJSaWdo
dCgpIHx8IChib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKSAmJiBib3hHZW9tZXRyeS5wYWRkaW5n
UmlnaHQoKS52YWx1ZSgpKTsKKyAgICB9CisKKyAgICBpZiAocnVuLmlzQm94KCkpIHsKKyAgICAg
ICAgaWYgKHJ1bi5sYXlvdXRCb3goKS5pc1JlcGxhY2VkQm94KCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgQVNTRVJUKHJ1bi5sYXlvdXRCb3goKS5pc0lubGluZUJsb2NrQm94
KCkgfHwgcnVuLmxheW91dEJveCgpLmlzSW5saW5lVGFibGVCb3goKSk7CisgICAgICAgIHJldHVy
biBydW4ubG9naWNhbFdpZHRoKCk7CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYg
TGluZTo6Zm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX2lubGluZUZv
cm1hdHRpbmdDb250ZXh0OworfQorCitMaW5lOjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OlRy
aW1tYWJsZVRyYWlsaW5nQ29udGVudChSdW5MaXN0JiBydW5zKQorICAgIDogbV9ydW5zKHJ1bnMp
Cit7Cit9CisKK3ZvaWQgTGluZTo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OjphZGRGdWxseVRy
aW1tYWJsZUNvbnRlbnQoc2l6ZV90IHJ1bkluZGV4LCBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJs
ZVdpZHRoKQoreworICAgIC8vIEFueSBzdWJzZXF1ZW50IHRyaW1tYWJsZSB3aGl0ZXNwYWNlIHNo
b3VsZCBjb2xsYXBzZSB0byB6ZXJvIGFkdmFuY2VkIHdpZHRoIGFuZCBpZ25vcmVkIGF0IDo6YXBw
ZW5kVGV4dENvbnRlbnQoKS4KKyAgICBBU1NFUlQoIW1faGFzRnVsbHlUcmltbWFibGVDb250ZW50
KTsKKyAgICBtX2Z1bGx5VHJpbW1hYmxlV2lkdGggPSB0cmltbWFibGVXaWR0aDsKKyAgICAvLyBO
b3RlIHRoYXQganVzdCBiZWNhdXNlIHRoZSB0cmltbWFibGUgd2lkdGggaXMgMCAoZm9udC1zaXpl
OiAwcHgpLCBpdCBkb2VzIG5vdCBtZWFuIHdlIGRvbid0IGhhdmUgYSB0cmltbWFibGUgdHJhaWxp
bmcgY29udGVudC4KKyAgICBtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCA9IHRydWU7CisgICAg
bV9maXJzdFJ1bkluZGV4ID0gbV9maXJzdFJ1bkluZGV4LnZhbHVlT3IocnVuSW5kZXgpOworfQor
Cit2b2lkIExpbmU6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1h
YmxlQ29udGVudChzaXplX3QgcnVuSW5kZXgsIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lk
dGgpCit7CisgICAgLy8gRG8gbm90IGFkZCB0cmltbWFibGUgbGV0dGVyIHNwYWNpbmcgYWZ0ZXIg
YSBmdWxseSB0cmltbWFibGUgd2hpdGVzcGFjZS4KKyAgICBBU1NFUlQoIW1fZmlyc3RSdW5JbmRl
eCk7CisgICAgQVNTRVJUKCFtX2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCk7CisgICAgQVNTRVJU
KCFtX3BhcnRpYWxseVRyaW1tYWJsZVdpZHRoKTsKKyAgICBBU1NFUlQodHJpbW1hYmxlV2lkdGgp
OworICAgIG1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGggPSB0cmltbWFibGVXaWR0aDsKKyAgICBt
X2ZpcnN0UnVuSW5kZXggPSBydW5JbmRleDsKK30KKworSW5saW5lTGF5b3V0VW5pdCBMaW5lOjpU
cmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OnJlbW92ZSgpCit7CisgICAgLy8gUmVtb3ZlIHRyaW1t
YWJsZSB0cmFpbGluZyBjb250ZW50IGFuZCBtb3ZlIGFsbCB0aGUgc3Vic2VxdWVudCB0cmFpbGlu
ZyBydW5zLgorICAgIC8vIDxzcGFuPiA8L3NwYW4+PHNwYW4+PC9zcGFuPgorICAgIC8vIFt0cmFp
bGluZyB3aGl0ZXNwYWNlXVtjb250YWluZXIgZW5kXVtjb250YWluZXIgc3RhcnRdW2NvbnRhaW5l
ciBlbmRdCisgICAgLy8gVHJpbSB0aGUgd2hpdGVzcGFjZSBydW4gYW5kIG1vdmUgdGhlIHRyYWls
aW5nIGlubGluZSBjb250YWluZXIgcnVucyB0byB0aGUgbG9naWNhbCBsZWZ0LgorICAgIEFTU0VS
VCghaXNFbXB0eSgpKTsKKyAgICBhdXRvJiB0cmltbWFibGVSdW4gPSBtX3J1bnNbKm1fZmlyc3RS
dW5JbmRleF07CisgICAgQVNTRVJUKHRyaW1tYWJsZVJ1bi5pc1RleHQoKSk7CisKKyAgICBpZiAo
bV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQpCisgICAgICAgIHRyaW1tYWJsZVJ1bi5yZW1vdmVU
cmFpbGluZ1doaXRlc3BhY2UoKTsKKyAgICBpZiAobV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0aCkK
KyAgICAgICAgdHJpbW1hYmxlUnVuLnJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZygpOworCisg
ICAgYXV0byB0cmltbWFibGVXaWR0aCA9IHdpZHRoKCk7CisgICAgZm9yIChhdXRvIGluZGV4ID0g
Km1fZmlyc3RSdW5JbmRleCArIDE7IGluZGV4IDwgbV9ydW5zLnNpemUoKTsgKytpbmRleCkgewor
ICAgICAgICBhdXRvJiBydW4gPSBtX3J1bnNbaW5kZXhdOworICAgICAgICBBU1NFUlQocnVuLmlz
Q29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSB8fCBydW4uaXNMaW5lQnJl
YWsoKSk7CisgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KC10cmltbWFibGVXaWR0aCk7Cisg
ICAgfQorICAgIHJlc2V0KCk7CisgICAgcmV0dXJuIHRyaW1tYWJsZVdpZHRoOworfQorCitJbmxp
bmVMYXlvdXRVbml0IExpbmU6OlRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDo6cmVtb3ZlUGFydGlh
bGx5VHJpbW1hYmxlQ29udGVudCgpCit7CisgICAgLy8gUGFydGlhbGx5IHRyaW1tYWJsZSBjb250
ZW50IGlzIGFsd2F5cyBnYXRlZCBieSBhIGZ1bGx5IHRyaW1tYWJsZSBjb250ZW50LgorICAgIC8v
IFdlIGNhbid0IGp1c3QgdHJpbSBzcGFjaW5nIGluIHRoZSBtaWRkbGUuCisgICAgQVNTRVJUKCFt
X2Z1bGx5VHJpbW1hYmxlV2lkdGgpOworICAgIHJldHVybiByZW1vdmUoKTsKK30KKworTGluZTo6
UnVuOjpSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCisgICAgOiBtX3R5cGUo
aW5saW5lSXRlbS50eXBlKCkpCisgICAgLCBtX2xheW91dEJveCgmaW5saW5lSXRlbS5sYXlvdXRC
b3goKSkKKyAgICAsIG1fbG9naWNhbExlZnQobG9naWNhbExlZnQpCisgICAgLCBtX2xvZ2ljYWxX
aWR0aChsb2dpY2FsV2lkdGgpCit7Cit9CisKK0xpbmU6OlJ1bjo6UnVuKGNvbnN0IElubGluZVNv
ZnRMaW5lQnJlYWtJdGVtJiBzb2Z0TGluZUJyZWFrSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dp
Y2FsTGVmdCkKKyAgICA6IG1fdHlwZShzb2Z0TGluZUJyZWFrSXRlbS50eXBlKCkpCisgICAgLCBt
X2xheW91dEJveCgmc29mdExpbmVCcmVha0l0ZW0ubGF5b3V0Qm94KCkpCisgICAgLCBtX2xvZ2lj
YWxMZWZ0KGxvZ2ljYWxMZWZ0KQorICAgICwgbV90ZXh0Q29udGVudCh7IHNvZnRMaW5lQnJlYWtJ
dGVtLnBvc2l0aW9uKCksIDEsIHNvZnRMaW5lQnJlYWtJdGVtLmlubGluZVRleHRCb3goKS5jb250
ZW50KCksIGZhbHNlIH0pCit7Cit9CisKK0xpbmU6OlJ1bjo6UnVuKGNvbnN0IElubGluZVRleHRJ
dGVtJiBpbmxpbmVUZXh0SXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5l
TGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBoZW4pCisgICAgOiBtX3R5cGUo
SW5saW5lSXRlbTo6VHlwZTo6VGV4dCkKKyAgICAsIG1fbGF5b3V0Qm94KCZpbmxpbmVUZXh0SXRl
bS5sYXlvdXRCb3goKSkKKyAgICAsIG1fbG9naWNhbExlZnQobG9naWNhbExlZnQpCisgICAgLCBt
X2xvZ2ljYWxXaWR0aChsb2dpY2FsV2lkdGgpCisgICAgLCBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5
cGUodHJhaWxpbmdXaGl0ZXNwYWNlVHlwZShpbmxpbmVUZXh0SXRlbSkpCisgICAgLCBtX3RleHRD
b250ZW50KHsgaW5saW5lVGV4dEl0ZW0uc3RhcnQoKSwgbV90cmFpbGluZ1doaXRlc3BhY2VUeXBl
ID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkID8gMSA6IGlubGluZVRleHRJdGVtLmxl
bmd0aCgpLCBpbmxpbmVUZXh0SXRlbS5pbmxpbmVUZXh0Qm94KCkuY29udGVudCgpLCBuZWVkc0h5
cGhlbiB9KQoreworICAgIGlmIChtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgIT0gVHJhaWxpbmdX
aGl0ZXNwYWNlOjpOb25lKSB7CisgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSBs
b2dpY2FsV2lkdGg7CisgICAgICAgIGlmICghaXNXaGl0ZXNwYWNlUHJlc2VydmVkKGlubGluZVRl
eHRJdGVtLnN0eWxlKCkpKQorICAgICAgICAgICAgbV9leHBhbnNpb25PcHBvcnR1bml0eUNvdW50
ID0gMTsKKyAgICB9Cit9CisKK3ZvaWQgTGluZTo6UnVuOjpleHBhbmQoY29uc3QgSW5saW5lVGV4
dEl0ZW0mIGlubGluZVRleHRJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKK3sK
KyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGV4cGFuc2lvbiBtZXJnZS4gV2Ug
c2hvdWxkIGV2ZW50dWFsbHkgc3dpdGNoIG92ZXIgdG8gRm9udENhc2NhZGU6OmV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQuCisgICAgQVNTRVJUKCFoYXNDb2xsYXBzZWRUcmFpbGluZ1doaXRlc3Bh
Y2UoKSk7CisgICAgQVNTRVJUKGlzVGV4dCgpICYmIGlubGluZVRleHRJdGVtLmlzVGV4dCgpKTsK
KyAgICBBU1NFUlQobV9sYXlvdXRCb3ggPT0gJmlubGluZVRleHRJdGVtLmxheW91dEJveCgpKTsK
KworICAgIG1fbG9naWNhbFdpZHRoICs9IGxvZ2ljYWxXaWR0aDsKKyAgICBtX3RyYWlsaW5nV2hp
dGVzcGFjZVR5cGUgPSB0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGlubGluZVRleHRJdGVtKTsKKwor
ICAgIGlmIChtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpO
b25lKSB7CisgICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSB7IH07CisgICAgICAg
IHNldEV4cGFuc2lvbkJlaGF2aW9yKEFsbG93TGVmdEV4cGFuc2lvbiB8IEFsbG93UmlnaHRFeHBh
bnNpb24pOworICAgICAgICBtX3RleHRDb250ZW50LT5leHBhbmQoaW5saW5lVGV4dEl0ZW0ubGVu
Z3RoKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGggKz0gbG9naWNhbFdpZHRoOworICAgIGlmICghaXNXaGl0ZXNwYWNlUHJlc2VydmVkKGlu
bGluZVRleHRJdGVtLnN0eWxlKCkpKQorICAgICAgICArK21fZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudDsKKyAgICBzZXRFeHBhbnNpb25CZWhhdmlvcihEZWZhdWx0RXhwYW5zaW9uKTsKKyAgICBt
X3RleHRDb250ZW50LT5leHBhbmQobV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID09IFRyYWlsaW5n
V2hpdGVzcGFjZTo6Q29sbGFwc2VkID8gMSA6IGlubGluZVRleHRJdGVtLmxlbmd0aCgpKTsKK30K
KworYm9vbCBMaW5lOjpSdW46Omhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZygpIGNvbnN0Cit7Cisg
ICAgLy8gQ29tcGxleCBsaW5lIGxheW91dCBkb2VzIG5vdCBrZWVwIHRyYWNrIG9mIHRyYWlsaW5n
IGxldHRlciBzcGFjaW5nLgorICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIWhhc1RyYWlsaW5nV2hpdGVzcGFjZSgp
ICYmIHN0eWxlKCkubGV0dGVyU3BhY2luZygpID4gMDsKK30KKworSW5saW5lTGF5b3V0VW5pdCBM
aW5lOjpSdW46OnRyYWlsaW5nTGV0dGVyU3BhY2luZygpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNU
cmFpbGluZ0xldHRlclNwYWNpbmcoKSkKKyAgICAgICAgcmV0dXJuIDBfbHU7CisgICAgcmV0dXJu
IElubGluZUxheW91dFVuaXQgeyBzdHlsZSgpLmxldHRlclNwYWNpbmcoKSB9OworfQorCit2b2lk
IExpbmU6OlJ1bjo6cmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkKK3sKKyAgICBBU1NFUlQo
aGFzVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkpOworICAgIHNocmlua0hvcml6b250YWxseSh0cmFp
bGluZ0xldHRlclNwYWNpbmcoKSk7CisgICAgQVNTRVJUKGxvZ2ljYWxXaWR0aCgpID4gMCB8fCAo
IWxvZ2ljYWxXaWR0aCgpICYmIHN0eWxlKCkubGV0dGVyU3BhY2luZygpID49IGludE1heEZvckxh
eW91dFVuaXQpKTsKK30KKwordm9pZCBMaW5lOjpSdW46OnJlbW92ZVRyYWlsaW5nV2hpdGVzcGFj
ZSgpCit7CisgICAgLy8gQWNjb3JkaW5nIHRvIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtdGV4
dC0zLyN3aGl0ZS1zcGFjZS1wcm9wZXJ0eSBtYXRyaXgKKyAgICAvLyBUcmltbWFibGUgd2hpdGVz
cGFjZSBpcyBhbHdheXMgY29sbGFwc2libGUgc28gdGhlIGxlbmd0aCBvZiB0aGUgdHJhaWxpbmcg
dHJpbW1hYmxlIHdoaXRlc3BhY2UgaXMgYWx3YXlzIDEgKG9yIG5vbi1leGlzdGVudCkuCisgICAg
QVNTRVJUKG1fdGV4dENvbnRlbnQtPmxlbmd0aCgpKTsKKyAgICBjb25zdGV4cHIgc2l6ZV90IHRy
YWlsaW5nVHJpbW1hYmxlQ29udGVudExlbmd0aCA9IDE7CisgICAgbV90ZXh0Q29udGVudC0+c2hy
aW5rKHRyYWlsaW5nVHJpbW1hYmxlQ29udGVudExlbmd0aCk7CisgICAgdmlzdWFsbHlDb2xsYXBz
ZVRyYWlsaW5nV2hpdGVzcGFjZSgpOworfQorCit2b2lkIExpbmU6OlJ1bjo6dmlzdWFsbHlDb2xs
YXBzZVRyYWlsaW5nV2hpdGVzcGFjZSgpCit7CisgICAgLy8gVGhpcyBpcyBqdXN0IGEgdmlzdWFs
IGFkanVzdG1lbnQsIHRoZSB0ZXh0IGxlbmd0aCBzaG91bGQgcmVtYWluIHRoZSBzYW1lLgorICAg
IHNocmlua0hvcml6b250YWxseShtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKTsKKyAgICBtX3Ry
YWlsaW5nV2hpdGVzcGFjZVdpZHRoID0geyB9OworICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlw
ZSA9IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZTsKKworICAgIGlmICghaXNXaGl0ZXNwYWNlUHJl
c2VydmVkKHN0eWxlKCkpKSB7CisgICAgICAgIEFTU0VSVChtX2V4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQpOworICAgICAgICBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQtLTsKKyAgICB9Cisg
ICAgc2V0RXhwYW5zaW9uQmVoYXZpb3IoQWxsb3dMZWZ0RXhwYW5zaW9uIHwgQWxsb3dSaWdodEV4
cGFuc2lvbik7Cit9CisKK3ZvaWQgTGluZTo6UnVuOjpzZXRFeHBhbnNpb25CZWhhdmlvcihFeHBh
bnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKK3sKKyAgICBBU1NFUlQoaXNUZXh0KCkp
OworICAgIG1fZXhwYW5zaW9uLmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3I7Cit9CisKK0V4
cGFuc2lvbkJlaGF2aW9yIExpbmU6OlJ1bjo6ZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdAorewor
ICAgIEFTU0VSVChpc1RleHQoKSk7CisgICAgcmV0dXJuIG1fZXhwYW5zaW9uLmJlaGF2aW9yOwor
fQorCit2b2lkIExpbmU6OlJ1bjo6c2V0SG9yaXpvbnRhbEV4cGFuc2lvbihJbmxpbmVMYXlvdXRV
bml0IGxvZ2ljYWxFeHBhbnNpb24pCit7CisgICAgQVNTRVJUKGlzVGV4dCgpKTsKKyAgICBBU1NF
UlQoaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSk7CisgICAgbV9leHBhbnNpb24uaG9yaXpvbnRh
bEV4cGFuc2lvbiA9IGxvZ2ljYWxFeHBhbnNpb247Cit9CisKK30KK30KKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5l
LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYTQ0NTJlMTQ4MzUzNThiMzM4MTU4ZmY4MDQ2YTE5ZGUwNjcwZGM4MAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUxpbmUuaApAQCAtMCwwICsxLDIxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCisKKyNpbmNsdWRlICJEaXNw
bGF5UnVuLmgiCisjaW5jbHVkZSAiSW5saW5lSXRlbS5oIgorI2luY2x1ZGUgIklubGluZVRleHRJ
dGVtLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBMYXlvdXQgeworCitjbGFz
cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKK2NsYXNzIElubGluZVNvZnRMaW5lQnJlYWtJdGVt
OworCitjbGFzcyBMaW5lIHsKK3B1YmxpYzoKKyAgICBMaW5lKGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0Jik7CisgICAgfkxpbmUoKTsKKworICAgIHZvaWQgb3BlbihJbmxpbmVMYXlvdXRV
bml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7CisgICAgdm9pZCBjbG9zZShib29sIGlzTGFzdExp
bmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgdm9pZCBjbGVhckNvbnRlbnQoKTsKKworICAgIHZv
aWQgc2V0SGFzSW50cnVzaXZlRmxvYXQoYm9vbCBoYXNJbnRydXNpdmVGbG9hdCkgeyBtX2hhc0lu
dHJ1c2l2ZUZsb2F0ID0gaGFzSW50cnVzaXZlRmxvYXQ7IH0KKyAgICBib29sIGhhc0ludHJ1c2l2
ZUZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRydXNpdmVGbG9hdDsgfQorCisgICAgdm9p
ZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRo
KTsKKyAgICB2b2lkIGFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJdGVtKGNvbnN0IElubGluZVRl
eHRJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBlbik7
CisKKyAgICBib29sIGlzVmlzdWFsbHlFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNWaXN1YWxs
eUVtcHR5OyB9CisKKyAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2FsV2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGg7IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGNv
bnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMb2dpY2FsV2lkdGg7
IH0KKyAgICBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29uc3QgeyByZXR1cm4g
bGluZUxvZ2ljYWxXaWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9CisKKyAgICBJbmxp
bmVMYXlvdXRVbml0IHRyaW1tYWJsZVRyYWlsaW5nV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3Ry
aW1tYWJsZVRyYWlsaW5nQ29udGVudC53aWR0aCgpOyB9CisgICAgYm9vbCBpc1RyYWlsaW5nUnVu
RnVsbHlUcmltbWFibGUoKSBjb25zdCB7IHJldHVybiBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVu
dC5pc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKTsgfQorCisgICAgdm9pZCBtb3ZlTG9naWNh
bExlZnQoSW5saW5lTGF5b3V0VW5pdCk7CisgICAgdm9pZCBtb3ZlTG9naWNhbFJpZ2h0KElubGlu
ZUxheW91dFVuaXQpOworCisgICAgc3RydWN0IFJ1biB7CisgICAgICAgIGJvb2wgaXNUZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OlRleHQ7IH0KKyAgICAg
ICAgYm9vbCBpc0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBl
OjpCb3g7IH0KKyAgICAgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJyZWFrIHx8IG1fdHlwZSA9PSBJbmxpbmVJ
dGVtOjpUeXBlOjpTb2Z0TGluZUJyZWFrOyB9CisgICAgICAgIGJvb2wgaXNDb250YWluZXJTdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpDb250YWluZXJT
dGFydDsgfQorICAgICAgICBib29sIGlzQ29udGFpbmVyRW5kKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlID09IElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lckVuZDsgfQorCisgICAgICAgIGNvbnN0
IEJveCYgbGF5b3V0Qm94KCkgY29uc3QgeyByZXR1cm4gKm1fbGF5b3V0Qm94OyB9CisgICAgICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0Qm94LT5z
dHlsZSgpOyB9CisgICAgICAgIGNvbnN0IE9wdGlvbmFsPERpc3BsYXk6OlJ1bjo6VGV4dENvbnRl
bnQ+JiB0ZXh0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRlbnQ7IH0KKworICAg
ICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9n
aWNhbFdpZHRoOyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQoKSBjb25z
dCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0OyB9CisgICAgICAgIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxvZ2ljYWxXaWR0aCgp
OyB9CisKKyAgICAgICAgY29uc3QgRGlzcGxheTo6UnVuOjpFeHBhbnNpb24mIGV4cGFuc2lvbigp
IGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uOyB9CisgICAgICAgIGJvb2wgaGFzRXhwYW5zaW9u
T3Bwb3J0dW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7
IH0KKyAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IoKSBjb25zdDsK
KyAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpIGNvbnN0IHsgcmV0
dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQorCisgICAgICAgIGJvb2wgaGFzVHJh
aWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VUeXBl
ICE9IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZTsgfQorICAgICAgICBJbmxpbmVMYXlvdXRVbml0
IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRl
c3BhY2VXaWR0aDsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIExpbmU7
CisKKyAgICAgICAgUnVuKGNvbnN0IElubGluZVRleHRJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBl
bik7CisgICAgICAgIFJ1bihjb25zdCBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbSYsIElubGluZUxh
eW91dFVuaXQgbG9naWNhbExlZnQpOworICAgICAgICBSdW4oY29uc3QgSW5saW5lSXRlbSYsIElu
bGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRo
KTsKKworICAgICAgICB2b2lkIGV4cGFuZChjb25zdCBJbmxpbmVUZXh0SXRlbSYsIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFdpZHRoKTsKKyAgICAgICAgdm9pZCBtb3ZlSG9yaXpvbnRhbGx5KElu
bGluZUxheW91dFVuaXQgb2Zmc2V0KSB7IG1fbG9naWNhbExlZnQgKz0gb2Zmc2V0OyB9CisgICAg
ICAgIHZvaWQgc2hyaW5rSG9yaXpvbnRhbGx5KElubGluZUxheW91dFVuaXQgd2lkdGgpIHsgbV9s
b2dpY2FsV2lkdGggLT0gd2lkdGg7IH0KKyAgICAgICAgdm9pZCBzZXRFeHBhbnNpb25CZWhhdmlv
cihFeHBhbnNpb25CZWhhdmlvcik7CisgICAgICAgIHZvaWQgc2V0SG9yaXpvbnRhbEV4cGFuc2lv
bihJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxFeHBhbnNpb24pOworICAgICAgICB2b2lkIHNldE5l
ZWRzSHlwaGVuKCkgeyBtX3RleHRDb250ZW50LT5zZXROZWVkc0h5cGhlbigpOyB9CisKKyAgICAg
ICAgZW51bSBjbGFzcyBUcmFpbGluZ1doaXRlc3BhY2UgeworICAgICAgICAgICAgTm9uZSwKKyAg
ICAgICAgICAgIE5vdENvbGxhcHNpYmxlLAorICAgICAgICAgICAgQ29sbGFwc2libGUsCisgICAg
ICAgICAgICBDb2xsYXBzZWQKKyAgICAgICAgfTsKKyAgICAgICAgYm9vbCBoYXNDb2xsYXBzaWJs
ZVRyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdXaGl0ZXNwYWNl
VHlwZSA9PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNpYmxlIHx8IGhhc0NvbGxhcHNlZFRy
YWlsaW5nV2hpdGVzcGFjZSgpOyB9CisgICAgICAgIGJvb2wgaGFzQ29sbGFwc2VkVHJhaWxpbmdX
aGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1doaXRlc3BhY2VUeXBlID09IFRy
YWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkOyB9CisgICAgICAgIFRyYWlsaW5nV2hpdGVzcGFj
ZSB0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGNvbnN0IElubGluZVRleHRJdGVtJikgY29uc3Q7Cisg
ICAgICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgIHZvaWQgdmlz
dWFsbHlDb2xsYXBzZVRyYWlsaW5nV2hpdGVzcGFjZSgpOworCisgICAgICAgIGJvb2wgaGFzVHJh
aWxpbmdMZXR0ZXJTcGFjaW5nKCkgY29uc3Q7CisgICAgICAgIElubGluZUxheW91dFVuaXQgdHJh
aWxpbmdMZXR0ZXJTcGFjaW5nKCkgY29uc3Q7CisgICAgICAgIHZvaWQgcmVtb3ZlVHJhaWxpbmdM
ZXR0ZXJTcGFjaW5nKCk7CisKKyAgICAgICAgSW5saW5lSXRlbTo6VHlwZSBtX3R5cGUgeyBJbmxp
bmVJdGVtOjpUeXBlOjpUZXh0IH07CisgICAgICAgIGNvbnN0IEJveCogbV9sYXlvdXRCb3ggeyBu
dWxscHRyIH07CisgICAgICAgIElubGluZUxheW91dFVuaXQgbV9sb2dpY2FsTGVmdCB7IDAgfTsK
KyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2xvZ2ljYWxXaWR0aCB7IDAgfTsKKyAgICAgICAg
VHJhaWxpbmdXaGl0ZXNwYWNlIG1fdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZSB7IFRyYWlsaW5nV2hp
dGVzcGFjZTo6Tm9uZSB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fdHJhaWxpbmdXaGl0
ZXNwYWNlV2lkdGggeyAwIH07CisgICAgICAgIE9wdGlvbmFsPERpc3BsYXk6OlJ1bjo6VGV4dENv
bnRlbnQ+IG1fdGV4dENvbnRlbnQ7CisgICAgICAgIERpc3BsYXk6OlJ1bjo6RXhwYW5zaW9uIG1f
ZXhwYW5zaW9uOworICAgICAgICB1bnNpZ25lZCBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
eyAwIH07CisgICAgfTsKKyAgICB1c2luZyBSdW5MaXN0ID0gVmVjdG9yPFJ1biwgMTA+OworICAg
IGNvbnN0IFJ1bkxpc3QmIHJ1bnMoKSBjb25zdCB7IHJldHVybiBtX3J1bnM7IH0KKworcHJpdmF0
ZToKKyAgICBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJl
dHVybiBtX2xpbmVMb2dpY2FsTGVmdCArIG1fY29udGVudExvZ2ljYWxXaWR0aDsgfQorCisgICAg
c3RydWN0IElubGluZVJ1bkRldGFpbHMgeworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aCB7IDAgfTsKKyAgICAgICAgYm9vbCBuZWVkc0h5cGhlbiB7IGZhbHNlIH07CisgICAg
fTsKKyAgICB2b2lkIGFwcGVuZFdpdGgoY29uc3QgSW5saW5lSXRlbSYsIGNvbnN0IElubGluZVJ1
bkRldGFpbHMmKTsKKyAgICB2b2lkIGFwcGVuZE5vbkJyZWFrYWJsZVNwYWNlKGNvbnN0IElubGlu
ZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCk7CisgICAgdm9pZCBhcHBlbmRUZXh0Q29udGVudChjb25zdCBJbmxpbmVUZXh0
SXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBib29sIG5lZWRzSHlwaGVuKTsK
KyAgICB2b2lkIGFwcGVuZE5vblJlcGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mLCBJ
bmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7CisgICAgdm9pZCBhcHBlbmRSZXBsYWNlZElu
bGluZUJveChjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgp
OworICAgIHZvaWQgYXBwZW5kSW5saW5lQ29udGFpbmVyU3RhcnQoY29uc3QgSW5saW5lSXRlbSYs
IElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsKKyAgICB2b2lkIGFwcGVuZElubGluZUNv
bnRhaW5lckVuZChjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lk
dGgpOworICAgIHZvaWQgYXBwZW5kTGluZUJyZWFrKGNvbnN0IElubGluZUl0ZW0mKTsKKworICAg
IHZvaWQgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7CisgICAgdm9pZCB2aXN1YWxs
eUNvbGxhcHNlUHJlV3JhcE92ZXJmbG93Q29udGVudCgpOworCisgICAgYm9vbCBpc1J1blZpc3Vh
bGx5Tm9uRW1wdHkoY29uc3QgUnVuJikgY29uc3Q7CisgICAgY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3Q7CisKKyAgICBzdHJ1Y3QgVHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50IHsKKyAgICAgICAgVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KFJ1
bkxpc3QmKTsKKworICAgICAgICB2b2lkIGFkZEZ1bGx5VHJpbW1hYmxlQ29udGVudChzaXplX3Qg
cnVuSW5kZXgsIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpOworICAgICAgICB2b2lk
IGFkZFBhcnRpYWxseVRyaW1tYWJsZUNvbnRlbnQoc2l6ZV90IHJ1bkluZGV4LCBJbmxpbmVMYXlv
dXRVbml0IHRyaW1tYWJsZVdpZHRoKTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCByZW1vdmUo
KTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCByZW1vdmVQYXJ0aWFsbHlUcmltbWFibGVDb250
ZW50KCk7CisKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJu
IG1fZnVsbHlUcmltbWFibGVXaWR0aCArIG1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGg7IH0KKyAg
ICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZmlyc3RSdW5JbmRleC5oYXNW
YWx1ZSgpOyB9CisgICAgICAgIGJvb2wgaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQ7IH0KKyAgICAgICAgYm9vbCBp
c1RyYWlsaW5nUnVuUGFydGlhbGx5VHJpbW1hYmxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJ0aWFs
bHlUcmltbWFibGVXaWR0aDsgfQorCisgICAgICAgIHZvaWQgcmVzZXQoKTsKKworICAgIHByaXZh
dGU6CisgICAgICAgIFJ1bkxpc3QmIG1fcnVuczsKKyAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBt
X2ZpcnN0UnVuSW5kZXg7CisgICAgICAgIGJvb2wgbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQg
eyBmYWxzZSB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1fZnVsbHlUcmltbWFibGVXaWR0
aCB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX3BhcnRpYWxseVRyaW1tYWJsZVdp
ZHRoIHsgMCB9OworICAgIH07CisKKyAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYg
bV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dDsKKyAgICBSdW5MaXN0IG1fcnVuczsKKyAgICBUcmlt
bWFibGVUcmFpbGluZ0NvbnRlbnQgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQ7CisgICAgSW5s
aW5lTGF5b3V0VW5pdCBtX2xpbmVMb2dpY2FsTGVmdCB7IDAgfTsKKyAgICBJbmxpbmVMYXlvdXRV
bml0IG1fbGluZUxvZ2ljYWxXaWR0aCB7IDAgfTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IG1fY29u
dGVudExvZ2ljYWxXaWR0aCB7IDAgfTsKKyAgICBib29sIG1faGFzSW50cnVzaXZlRmxvYXQgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9pc1Zpc3VhbGx5RW1wdHkgeyB0cnVlIH07CisgICAgT3B0aW9u
YWw8Ym9vbD4gbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdDb250
ZW50OworICAgIGJvb2wgbV9zaG91bGRJZ25vcmVUcmFpbGluZ0xldHRlclNwYWNpbmcgeyBmYWxz
ZSB9OworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgYm9vbCBtX2lzQ2xvc2VkIHsgZmFsc2UgfTsK
KyNlbmRpZgorfTsKKworaW5saW5lIHZvaWQgTGluZTo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50
OjpyZXNldCgpCit7CisgICAgbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQgPSBmYWxzZTsKKyAg
ICBtX2ZpcnN0UnVuSW5kZXggPSB7IH07CisgICAgbV9mdWxseVRyaW1tYWJsZVdpZHRoID0geyB9
OworICAgIG1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGggPSB7IH07Cit9CisKK2lubGluZSBMaW5l
OjpSdW46OlRyYWlsaW5nV2hpdGVzcGFjZSBMaW5lOjpSdW46OnRyYWlsaW5nV2hpdGVzcGFjZVR5
cGUoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtKSBjb25zdAoreworICAgIGlm
ICghaW5saW5lVGV4dEl0ZW0uaXNXaGl0ZXNwYWNlKCkpCisgICAgICAgIHJldHVybiBUcmFpbGlu
Z1doaXRlc3BhY2U6Ok5vbmU7CisgICAgaWYgKCFpbmxpbmVUZXh0SXRlbS5pc0NvbGxhcHNpYmxl
KCkpCisgICAgICAgIHJldHVybiBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vdENvbGxhcHNpYmxlOwor
ICAgIGlmIChpbmxpbmVUZXh0SXRlbS5sZW5ndGgoKSA9PSAxKQorICAgICAgICByZXR1cm4gVHJh
aWxpbmdXaGl0ZXNwYWNlOjpDb2xsYXBzaWJsZTsKKyAgICByZXR1cm4gVHJhaWxpbmdXaGl0ZXNw
YWNlOjpDb2xsYXBzZWQ7Cit9CisKK30KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAppbmRleCA2
MmNkYjc4MzgzNjg0NGUwZjZiZDY1MDM3YzAzOTlhZDc5Nzc5MGEzLi5kYTcxODdlMmUyZGRhZmI1
ZmM2OTk0NTRiYTFmZjJkNmYyYzFkZTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcApAQCAtNTksNyArNTks
NyBAQCB2b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgpCiAgICAgbV93aWR0aCA9ICAwOwogfQog
Ci1zdGF0aWMgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhhbmdpbmdDb250ZW50KGNvbnN0IExpbmVC
dWlsZGVyOjpSdW5MaXN0JiBydW5zLCBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRl
bnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQorc3RhdGljIEhhbmdpbmdDb250ZW50IGNv
bGxlY3RIYW5naW5nQ29udGVudChjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zLCBMaW5lQm94OjpJ
c0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQog
ewogICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBIYW5naW5nQ29udGVudCB7IH07CiAgICAgaWYg
KGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9PSBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQ6OlllcykKQEAgLTgyLDcgKzgyLDcgQEAgc3RhdGljIEhhbmdpbmdDb250ZW50
IGNvbGxlY3RIYW5naW5nQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVucywg
TGkKICAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxJbmxp
bmVMYXlvdXRVbml0PiBob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0KGNvbnN0IExpbmVCdWlsZGVy
OjpSdW5MaXN0JiBydW5zLCBUZXh0QWxpZ25Nb2RlIHRleHRBbGlnbiwgSW5saW5lTGF5b3V0VW5p
dCBsaW5lTG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgs
IExpbmVCb3g6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQorc3RhdGlj
IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQoY29u
c3QgTGluZTo6UnVuTGlzdCYgcnVucywgVGV4dEFsaWduTW9kZSB0ZXh0QWxpZ24sIElubGluZUxh
eW91dFVuaXQgbGluZUxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bFdpZHRoLCBMaW5lQm94OjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZSkK
IHsKICAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0gbGluZUxvZ2ljYWxXaWR0aCAtIGNvbnRlbnRM
b2dpY2FsV2lkdGg7CiAgICAgYXV0byBoYW5naW5nQ29udGVudCA9IGNvbGxlY3RIYW5naW5nQ29u
dGVudChydW5zLCBpc0xhc3RMaW5lKTsKQEAgLTE0Myw3ICsxNDMsNyBAQCBMaW5lQm94OjpJbmxp
bmVCb3g6OklubGluZUJveChjb25zdCBCb3gmIGxheW91dEJveCwgY29uc3QgRGlzcGxheTo6SW5s
aW5lUmVjdCYgcgogewogfQogCi1MaW5lQm94OjpMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSW5saW5lTGF5b3V0UG9p
bnQmIHRvcExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRV
bml0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGNvbnN0IExpbmVCdWlsZGVyOjpSdW5MaXN0JiBydW5z
LCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5RW1wdHksIElzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCitMaW5lQm94OjpMaW5l
Qm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCwgY29uc3QgSW5saW5lTGF5b3V0UG9pbnQmIHRvcExlZnQsIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgsIGNvbnN0IExp
bmU6OlJ1bkxpc3QmIHJ1bnMsIElzTGluZVZpc3VhbGx5RW1wdHkgaXNMaW5lVmlzdWFsbHlFbXB0
eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCkKICAgICA6IG1fcmVjdCh0b3BMZWZ0LCBsb2dpY2FsV2lkdGgsIHsgfSkKICAgICAsIG1fY29u
dGVudExvZ2ljYWxXaWR0aChjb250ZW50TG9naWNhbFdpZHRoKQogICAgICwgbV9pbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKQEAgLTE2NCw3ICsxNjQsNyBA
QCBMaW5lQm94OjpMaW5lQm94KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCwgY29uc3QgSQogICAgIG1fc2Nyb2xsYWJsZU92ZXJmbG93LmV4cGFu
ZFZlcnRpY2FsbHkobG9naWNhbEJvdHRvbSk7CiB9CiAKLURpc3BsYXk6OklubGluZVJlY3QgTGlu
ZUJveDo6aW5saW5lUmVjdEZvclRleHRSdW4oY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYgcnVuKSBj
b25zdAorRGlzcGxheTo6SW5saW5lUmVjdCBMaW5lQm94OjppbmxpbmVSZWN0Rm9yVGV4dFJ1bihj
b25zdCBMaW5lOjpSdW4mIHJ1bikgY29uc3QKIHsKICAgICBBU1NFUlQocnVuLmlzVGV4dCgpIHx8
IHJ1bi5pc0xpbmVCcmVhaygpKTsKICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBpbmxpbmVC
b3hGb3JMYXlvdXRCb3gocnVuLmxheW91dEJveCgpLnBhcmVudCgpKTsKQEAgLTE3Miw3ICsxNzIs
NyBAQCBEaXNwbGF5OjpJbmxpbmVSZWN0IExpbmVCb3g6OmlubGluZVJlY3RGb3JUZXh0UnVuKGNv
bnN0IExpbmVCdWlsZGVyOjpSdW4mIHJ1bikgYwogICAgIHJldHVybiB7IGlubGluZUJveFJlY3Qu
dG9wKCksIHJ1bi5sb2dpY2FsTGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCksIGlubGluZUJveFJl
Y3QuaGVpZ2h0KCkgfTsKIH0KIAotdm9pZCBMaW5lQm94Ojpjb25zdHJ1Y3RJbmxpbmVCb3hlcyhj
b25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVucywgSXNMaW5lVmlzdWFsbHlFbXB0eSBpc0xp
bmVWaXN1YWxseUVtcHR5KQordm9pZCBMaW5lQm94Ojpjb25zdHJ1Y3RJbmxpbmVCb3hlcyhjb25z
dCBMaW5lOjpSdW5MaXN0JiBydW5zLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGluZVZpc3VhbGx5
RW1wdHkpCiB7CiAgICAgYXV0byBjb25zdHJ1Y3RSb290SW5saW5lQm94ID0gWyZdIHsKICAgICAg
ICAgYXV0byYgZm9udE1ldHJpY3MgPSByb290KCkuc3R5bGUoKS5mb250TWV0cmljcygpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGlu
ZUJveC5oCmluZGV4IGE1YmQzNTA0MzBkMGU2MmY4ZDc3YTgxYzZmMGI2MGIxMjdlNTgwMWQuLjAz
ZTM0NDJhMGZhMTgyYjgzMzU3Zjk1Y2E0ZmZmY2NhMDMyZGZjNGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKQEAg
LTI5LDcgKzI5LDcgQEAKIAogI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNsdWRlICJEaXNw
bGF5SW5saW5lUmVjdC5oIgotI2luY2x1ZGUgIklubGluZUxpbmVCdWlsZGVyLmgiCisjaW5jbHVk
ZSAiSW5saW5lTGluZS5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+CiAjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KIApAQCAtODAsNyArODAsNyBAQCBwdWJsaWM6CiAKICAgICBl
bnVtIGNsYXNzIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCB7IE5vLCBZZXMgfTsKICAgICBl
bnVtIGNsYXNzIElzTGluZVZpc3VhbGx5RW1wdHkgeyBObywgWWVzIH07Ci0gICAgTGluZUJveChj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IElubGluZUxheW91dFBvaW50JiB0
b3BMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBj
b250ZW50TG9naWNhbFdpZHRoLCBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElzTGluZVZp
c3VhbGx5RW1wdHksIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgTGluZUJveChj
b25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYsIGNvbnN0IElubGluZUxheW91dFBvaW50JiB0
b3BMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgSW5saW5lTGF5b3V0VW5pdCBj
b250ZW50TG9naWNhbFdpZHRoLCBjb25zdCBMaW5lOjpSdW5MaXN0JiwgSXNMaW5lVmlzdWFsbHlF
bXB0eSwgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKIAogICAgIElubGluZUxheW91dFVu
aXQgbG9naWNhbExlZnQoKSBjb25zdCB7IHJldHVybiBtX3JlY3QubGVmdCgpOyB9CiAgICAgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHQoKSBjb25zdCB7IHJldHVybiBtX3JlY3QucmlnaHQo
KTsgfQpAQCAtOTMsNyArOTMsNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgRGlzcGxheTo6SW5saW5l
UmVjdCYgc2Nyb2xsYWJsZU92ZXJmbG93KCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxhYmxlT3Zl
cmZsb3c7IH0KIAogICAgIGNvbnN0IElubGluZUJveCYgaW5saW5lQm94Rm9yTGF5b3V0Qm94KGNv
bnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdCB7IHJldHVybiAqbV9pbmxpbmVCb3hSZWN0TWFwLmdl
dCgmbGF5b3V0Qm94KTsgfQotICAgIERpc3BsYXk6OklubGluZVJlY3QgaW5saW5lUmVjdEZvclRl
eHRSdW4oY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYpIGNvbnN0OworICAgIERpc3BsYXk6OklubGlu
ZVJlY3QgaW5saW5lUmVjdEZvclRleHRSdW4oY29uc3QgTGluZTo6UnVuJikgY29uc3Q7CiAKICAg
ICAvLyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XyBsaW5lIGJveCBsb2dpY2FsIHRvcAogICAgIC8vICAgICAgICAgICAgICAgICAgICAgIF4KQEAg
LTExMyw3ICsxMTMsNyBAQCBwdWJsaWM6CiAgICAgSW5saW5lTGF5b3V0VW5pdCBhbGlnbm1lbnRC
YXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9vdElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBt
X3Jvb3RJbmxpbmVCb3guYmFzZWxpbmUoKTsgfQogCiBwcml2YXRlOgotICAgIHZvaWQgY29uc3Ry
dWN0SW5saW5lQm94ZXMoY29uc3QgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJc0xpbmVWaXN1YWxs
eUVtcHR5KTsKKyAgICB2b2lkIGNvbnN0cnVjdElubGluZUJveGVzKGNvbnN0IExpbmU6OlJ1bkxp
c3QmLCBJc0xpbmVWaXN1YWxseUVtcHR5KTsKICAgICB2b2lkIGNvbXB1dGVJbmxpbmVCb3hlc0xv
Z2ljYWxIZWlnaHQoKTsKICAgICB2b2lkIGFsaWduSW5saW5lQm94ZXNWZXJ0aWNhbGx5QW5kQ29t
cHV0ZUxpbmVCb3hIZWlnaHQoSXNMaW5lVmlzdWFsbHlFbXB0eSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWZhZjM2YmI0NTM3OGQ0OWVl
OTVhMDAwOTYxMzIyZGRkOGZhOTk0MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVMaW5lQnVpbGRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbmxpbmVMaW5lQnVpbGRlci5o
IgotCi0jaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIklubGluZVNvZnRMaW5lQnJlYWtJ
dGVtLmgiCi0jaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgotI2luY2x1ZGUgIlRl
eHRGbGFncy5oIgotI2luY2x1ZGUgIlRleHRVdGlsLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxv
Y0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0K
LXN0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlc3BhY2VQcmVzZXJ2ZWQoY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKQotewotICAgIGF1dG8gd2hpdGVzcGFjZSA9IHN0eWxlLndoaXRlU3BhY2UoKTsK
LSAgICByZXR1cm4gd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpQcmUgfHwgd2hpdGVzcGFjZSA9
PSBXaGl0ZVNwYWNlOjpQcmVXcmFwIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6QnJlYWtT
cGFjZXM7Ci19Ci0KLUxpbmVCdWlsZGVyOjpMaW5lQnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgOiBtX2lubGluZUZvcm1h
dHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV90cmltbWFibGVU
cmFpbGluZ0NvbnRlbnQobV9ydW5zKQotICAgICwgbV9zaG91bGRJZ25vcmVUcmFpbGluZ0xldHRl
clNwYWNpbmcoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRG
b3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKQotewotfQotCi1MaW5lQnVpbGRl
cjo6fkxpbmVCdWlsZGVyKCkKLXsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6b3BlbihJbmxpbmVM
YXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQotewotICAgIG1fbGluZUxvZ2ljYWxXaWR0aCA9IGF2
YWlsYWJsZVdpZHRoOwotICAgIGNsZWFyQ29udGVudCgpOwotI2lmIEFTU0VSVF9FTkFCTEVECi0g
ICAgbV9pc0Nsb3NlZCA9IGZhbHNlOwotI2VuZGlmCi19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6OmNs
ZWFyQ29udGVudCgpCi17Ci0gICAgbV9jb250ZW50TG9naWNhbFdpZHRoID0geyB9OwotICAgIG1f
aXNWaXN1YWxseUVtcHR5ID0gdHJ1ZTsKLSAgICBtX3J1bnMuY2xlYXIoKTsKLSAgICBtX3RyaW1t
YWJsZVRyYWlsaW5nQ29udGVudC5yZXNldCgpOwotICAgIG1fbGluZUlzVmlzdWFsbHlFbXB0eUJl
Zm9yZVRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCA9IHsgfTsKLX0KLQotdm9pZCBMaW5lQnVpbGRl
cjo6Y2xvc2UoYm9vbCBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpCi17Ci0jaWYgQVNTRVJU
X0VOQUJMRUQKLSAgICBtX2lzQ2xvc2VkID0gdHJ1ZTsKLSNlbmRpZgotICAgIHJlbW92ZVRyYWls
aW5nVHJpbW1hYmxlQ29udGVudCgpOwotICAgIHZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZs
b3dDb250ZW50KCk7Ci0KLSAgICBhdXRvIGNvbXB1dGVFeHBhbnNpb25Gb3JSdW5zSWZOZWVkZWQg
PSBbJl0gewotICAgICAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5yb290KCkuc3R5bGUoKS50
ZXh0QWxpZ24oKSAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBz
cGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAgLy8gaW4gb3Jk
ZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZp
ZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAotICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBh
IGZvcmNlZCBicmVhayBvciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgot
ICAgICAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8fCBtX3J1bnMubGFzdCgpLmlzTGlu
ZUJyZWFrKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgYXV0byBleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50ID0gMDsKLSAgICAgICAgUnVuKiBsYXN0UnVuV2l0aENvbnRlbnQgPSBu
dWxscHRyOwotICAgICAgICAvLyBDb2xsZWN0IGFuZCBkaXN0cmlidXRlIHRoZSBleHBhbnNpb24g
b3Bwb3J0dW5pdGllcy4KLSAgICAgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAg
ICAgICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQoKTsKLSAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzQm94KCkp
Ci0gICAgICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50ID0gJnJ1bjsKLSAgICAgICAgfQot
ICAgICAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUgbGFzdCBydW4ncyB0cmFpbGluZyBleHBhbnNp
b24uCi0gICAgICAgIGlmIChsYXN0UnVuV2l0aENvbnRlbnQgJiYgbGFzdFJ1bldpdGhDb250ZW50
LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7Ci0gICAgICAgICAgICAvLyBUdXJuIG9mZiB0
aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBhbmQgYWRkIHRoZSBmb3JiaWQgdHJhaWxpbmcgZXhwYW5z
aW9uLgotICAgICAgICAgICAgYXV0byBsZWFkaW5nRXhwYW5zaW9uID0gbGFzdFJ1bldpdGhDb250
ZW50LT5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4cGFuc2lvbk1hc2s7Ci0gICAgICAgICAg
ICBsYXN0UnVuV2l0aENvbnRlbnQtPnNldEV4cGFuc2lvbkJlaGF2aW9yKGxlYWRpbmdFeHBhbnNp
b24gfCBGb3JiaWRSaWdodEV4cGFuc2lvbik7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gQW55dGhp
bmcgdG8gZGlzdHJpYnV0ZT8KLSAgICAgICAgaWYgKGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQg
JiYgYXZhaWxhYmxlV2lkdGgoKSkgewotICAgICAgICAgICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0
cmEgc3BhY2UuCi0gICAgICAgICAgICBhdXRvIGV4cGFuc2lvblRvRGlzdHJpYnV0ZSA9IGF2YWls
YWJsZVdpZHRoKCkgLyBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50OwotICAgICAgICAgICAgYXV0
byBhY2N1bXVsYXRlZEV4cGFuc2lvbiA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAgICAg
ICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgICAgICAgICAvLyBFeHBhbmQg
YW5kIG1vdmUgcnVucyBieSB0aGUgYWNjdW11bGF0ZWQgZXhwYW5zaW9uLgotICAgICAgICAgICAg
ICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIXJ1bi5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBBU1NFUlQocnVuLmV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQoKSk7Ci0gICAgICAgICAgICAgICAgYXV0byBjb21wdXRlZEV4cGFuc2lv
biA9IGV4cGFuc2lvblRvRGlzdHJpYnV0ZSAqIHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50
KCk7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IENoZWNrIHdoeSB3ZSBuZWVkIHRvIHNldCBi
b3RoLgotICAgICAgICAgICAgICAgIHJ1bi5zZXRIb3Jpem9udGFsRXhwYW5zaW9uKGNvbXB1dGVk
RXhwYW5zaW9uKTsKLSAgICAgICAgICAgICAgICBydW4uc2hyaW5rSG9yaXpvbnRhbGx5KC1jb21w
dXRlZEV4cGFuc2lvbik7Ci0gICAgICAgICAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0g
Y29tcHV0ZWRFeHBhbnNpb247Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9OwotICAg
IGNvbXB1dGVFeHBhbnNpb25Gb3JSdW5zSWZOZWVkZWQoKTsKLX0KLQotdm9pZCBMaW5lQnVpbGRl
cjo6cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCkKLXsKLSAgICBpZiAobV90cmltbWFi
bGVUcmFpbGluZ0NvbnRlbnQuaXNFbXB0eSgpIHx8IG1fcnVucy5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIENvbXBsZXggbGluZSBsYXlvdXQgcXVpcms6IGtlZXAgdGhlIHRy
YWlsaW5nIHdoaXRlc3BhY2UgYXJvdW5kIHdoZW4gaXQgaXMgZm9sbG93ZWQgYnkgYSBsaW5lIGJy
ZWFrLCB1bmxlc3MgdGhlIGNvbnRlbnQgb3ZlcmZsb3dzIHRoZSBsaW5lLgotICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250
ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgYXV0byBpc1RleHRBbGlnblJpZ2h0
ID0gWyZdIHsKLSAgICAgICAgICAgIGF1dG8gdGV4dEFsaWduID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5yb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsKLSAgICAgICAgICAgIHJldHVybiB0ZXh0QWxp
Z24gPT0gVGV4dEFsaWduTW9kZTo6UmlnaHQKLSAgICAgICAgICAgICAgICB8fCB0ZXh0QWxpZ24g
PT0gVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQKLSAgICAgICAgICAgICAgICB8fCB0ZXh0QWxp
Z24gPT0gVGV4dEFsaWduTW9kZTo6RW5kOwotICAgICAgICAgICAgfSgpOwotCi0gICAgICAgIGlm
IChtX3J1bnMubGFzdCgpLmlzTGluZUJyZWFrKCkgJiYgYXZhaWxhYmxlV2lkdGgoKSA+PSAwICYm
ICFpc1RleHRBbGlnblJpZ2h0KSB7Ci0gICAgICAgICAgICBtX3RyaW1tYWJsZVRyYWlsaW5nQ29u
dGVudC5yZXNldCgpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbV9jb250ZW50TG9naWNhbFdpZHRoIC09IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LnJl
bW92ZSgpOwotICAgIC8vIElmIHdlIHJlbW92ZWQgdGhlIGZpcnN0IHZpc2libGUgcnVuIG9uIHRo
ZSBsaW5lLCB3ZSBuZWVkIHRvIHJlLWNoZWNrIHRoZSB2aXNpYmlsaXR5IHN0YXR1cy4KLSAgICBp
ZiAobV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KSB7
Ci0gICAgICAgIC8vIEp1c3QgYmVjYXVzZSB0aGUgbGluZSB3YXMgdmlzdWFsbHkgZW1wdHkgYmVm
b3JlIHRoZSByZW1vdmVkIGNvbnRlbnQsIGl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gaXQg
aXMgc3RpbGwgdmlzdWFsbHkgZW1wdHkuCi0gICAgICAgIC8vIDxzcGFuPiAgPC9zcGFuPjxzcGFu
IHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDEwcHgiPjwvc3Bhbj4gIDwtIG5vbi1lbXB0eQotICAgICAg
ICBhdXRvIGxpbmVJc1Zpc3VhbGx5RW1wdHkgPSBbJl0gewotICAgICAgICAgICAgZm9yIChhdXRv
JiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNSdW5WaXN1YWxseU5vbkVt
cHR5KHJ1bikpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9OwotICAgICAgICAvLyBXZSBj
b3VsZCBvbmx5IGdvIGZyb20gdmlzdWFsbHkgbm9uIGVtcHR5IC0+IHRvIHZpc3VhbGx5IGVtcHR5
LiBUcmltbWVkIHJ1bnMgc2hvdWxkIG5ldmVyIG1ha2UgdGhlIGxpbmUgdmlzaWJsZS4KLSAgICAg
ICAgbV9pc1Zpc3VhbGx5RW1wdHkgPSBsaW5lSXNWaXN1YWxseUVtcHR5KCk7Ci0gICAgICAgIG1f
bGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCA9IHsgfTsK
LSAgICB9Ci19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6OnZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3Zl
cmZsb3dDb250ZW50KCkKLXsKLSAgICBBU1NFUlQobV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQu
aXNFbXB0eSgpKTsKLSAgICAvLyBJZiB3aGl0ZS1zcGFjZSBpcyBzZXQgdG8gcHJlLXdyYXAsIHRo
ZSBVQSBtdXN0Ci0gICAgLy8gLi4uCi0gICAgLy8gSXQgbWF5IGFsc28gdmlzdWFsbHkgY29sbGFw
c2UgdGhlIGNoYXJhY3RlciBhZHZhbmNlIHdpZHRocyBvZiBhbnkgdGhhdCB3b3VsZCBvdGhlcndp
c2Ugb3ZlcmZsb3cuCi0gICAgYXV0byBvdmVyZmxvd1dpZHRoID0gLWF2YWlsYWJsZVdpZHRoKCk7
Ci0gICAgaWYgKG92ZXJmbG93V2lkdGggPD0gMCkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIExl
dCdzIGp1c3QgZmluZCB0aGUgdHJhaWxpbmcgcHJlLXdyYXAgd2hpdGVzcGFjZSBjb250ZW50IGZv
ciBub3cgKGUuZyBjaGVjayBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgdHJhaWxpbmcgcnVucyB3aXRo
Ci0gICAgLy8gZGlmZmVyZW50IHNldCBvZiB3aGl0ZS1zcGFjZSB2YWx1ZXMgYW5kIGRlY2lkZSBp
ZiB0aGUgaW4tYmV0d2VlbiBwcmUtd3JhcCBjb250ZW50IHNob3VsZCBiZSBjb2xsYXBzZWQgYXMg
d2VsbC4pCi0gICAgSW5saW5lTGF5b3V0VW5pdCB0cmltbWVkQ29udGVudFdpZHRoID0gMDsKLSAg
ICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UobV9ydW5zKSkgewotICAg
ICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXAp
IHsKLSAgICAgICAgICAgIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gcHJlLXdyYXAgdHJh
aWxpbmcgY29udGVudC4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGF1
dG8gcHJlV3JhcFZpc3VhbGx5Q29sbGFwc2libGVJbmxpbmVJdGVtID0gcnVuLmlzQ29udGFpbmVy
U3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSB8fCBydW4uaGFzVHJhaWxpbmdXaGl0ZXNw
YWNlKCk7Ci0gICAgICAgIGlmICghcHJlV3JhcFZpc3VhbGx5Q29sbGFwc2libGVJbmxpbmVJdGVt
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIEFTU0VSVCghcnVuLmhhc0NvbGxhcHNpYmxl
VHJhaWxpbmdXaGl0ZXNwYWNlKCkpOwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJs
ZVdpZHRoID0geyB9OwotICAgICAgICBpZiAocnVuLmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGFsd2F5cyBjb2xsYXBzZSB0aGUgcnVuIGF0IGEgZ2x5cGggYm91
bmRhcnkgYXMgdGhlIHNwZWMgaW5kaWNhdGVzOiAiY29sbGFwc2UgdGhlIGNoYXJhY3RlciBhZHZh
bmNlIHdpZHRocyBvZiBhbnkgdGhhdCB3b3VsZCBvdGhlcndpc2Ugb3ZlcmZsb3ciCi0gICAgICAg
ICAgICAvLyBhbmQgdGhlIHRyaW1tZWQgd2lkdGggc2hvdWxkIGJlIGNhcHBlZCBhdCBzdGQ6Om1p
bihydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSwgb3ZlcmZsb3dXaWR0aCkgZm9yIHRleHQg
cnVucy4gQm90aCBGRiBhbmQgQ2hyb21lIGFncmVlLgotICAgICAgICAgICAgdHJpbW1hYmxlV2lk
dGggPSBydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKTsKLSAgICAgICAgICAgIHJ1bi52aXN1
YWxseUNvbGxhcHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB0cmltbWFibGVXaWR0aCA9IHJ1bi5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAg
IHJ1bi5zaHJpbmtIb3Jpem9udGFsbHkodHJpbW1hYmxlV2lkdGgpOwotICAgICAgICB9Ci0gICAg
ICAgIHRyaW1tZWRDb250ZW50V2lkdGggKz0gdHJpbW1hYmxlV2lkdGg7Ci0gICAgICAgIG92ZXJm
bG93V2lkdGggLT0gdHJpbW1hYmxlV2lkdGg7Ci0gICAgICAgIGlmIChvdmVyZmxvd1dpZHRoIDw9
IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgbV9jb250ZW50TG9naWNhbFdpZHRo
IC09IHRyaW1tZWRDb250ZW50V2lkdGg7Ci19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6Om1vdmVMb2dp
Y2FsTGVmdChJbmxpbmVMYXlvdXRVbml0IGRlbHRhKQotewotICAgIGlmICghZGVsdGEpCi0gICAg
ICAgIHJldHVybjsKLSAgICBBU1NFUlQoZGVsdGEgPiAwKTsKLSAgICBtX2xpbmVMb2dpY2FsTGVm
dCArPSBkZWx0YTsKLSAgICBtX2xpbmVMb2dpY2FsV2lkdGggLT0gZGVsdGE7Ci19Ci0KLXZvaWQg
TGluZUJ1aWxkZXI6Om1vdmVMb2dpY2FsUmlnaHQoSW5saW5lTGF5b3V0VW5pdCBkZWx0YSkKLXsK
LSAgICBBU1NFUlQoZGVsdGEgPiAwKTsKLSAgICBtX2xpbmVMb2dpY2FsV2lkdGggLT0gZGVsdGE7
Ci19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJ
dGVtLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCkKLXsKLSAgICBBU1NFUlQoIW1faXND
bG9zZWQpOwotICAgIGFwcGVuZFdpdGgoaW5saW5lSXRlbSwgeyBsb2dpY2FsV2lkdGgsIGZhbHNl
IH0pOwotfQotCi12b2lkIExpbmVCdWlsZGVyOjphcHBlbmRQYXJ0aWFsVHJhaWxpbmdUZXh0SXRl
bShjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lVGV4dEl0ZW0sIElubGluZUxheW91dFVuaXQg
bG9naWNhbFdpZHRoLCBib29sIG5lZWRzSHlwaGVuKQotewotICAgIGFwcGVuZFdpdGgoaW5saW5l
VGV4dEl0ZW0sIHsgbG9naWNhbFdpZHRoLCBuZWVkc0h5cGhlbiB9KTsKLX0KLQotdm9pZCBMaW5l
QnVpbGRlcjo6YXBwZW5kV2l0aChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBjb25zdCBJ
bmxpbmVSdW5EZXRhaWxzJiBpbmxpbmVSdW5EZXRhaWxzKQotewotICAgIGlmIChpbmxpbmVJdGVt
LmlzVGV4dCgpKQotICAgICAgICBhcHBlbmRUZXh0Q29udGVudChkb3duY2FzdDxJbmxpbmVUZXh0
SXRlbT4oaW5saW5lSXRlbSksIGlubGluZVJ1bkRldGFpbHMubG9naWNhbFdpZHRoLCBpbmxpbmVS
dW5EZXRhaWxzLm5lZWRzSHlwaGVuKTsKLSAgICBlbHNlIGlmIChpbmxpbmVJdGVtLmlzTGluZUJy
ZWFrKCkpCi0gICAgICAgIGFwcGVuZExpbmVCcmVhayhpbmxpbmVJdGVtKTsKLSAgICBlbHNlIGlm
IChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSkKLSAgICAgICAgYXBwZW5kSW5saW5lQ29u
dGFpbmVyU3RhcnQoaW5saW5lSXRlbSwgaW5saW5lUnVuRGV0YWlscy5sb2dpY2FsV2lkdGgpOwot
ICAgIGVsc2UgaWYgKGlubGluZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgYXBwZW5k
SW5saW5lQ29udGFpbmVyRW5kKGlubGluZUl0ZW0sIGlubGluZVJ1bkRldGFpbHMubG9naWNhbFdp
ZHRoKTsKLSAgICBlbHNlIGlmIChpbmxpbmVJdGVtLmxheW91dEJveCgpLmlzUmVwbGFjZWRCb3go
KSkKLSAgICAgICAgYXBwZW5kUmVwbGFjZWRJbmxpbmVCb3goaW5saW5lSXRlbSwgaW5saW5lUnVu
RGV0YWlscy5sb2dpY2FsV2lkdGgpOwotICAgIGVsc2UgaWYgKGlubGluZUl0ZW0uaXNCb3goKSkK
LSAgICAgICAgYXBwZW5kTm9uUmVwbGFjZWRJbmxpbmVCb3goaW5saW5lSXRlbSwgaW5saW5lUnVu
RGV0YWlscy5sb2dpY2FsV2lkdGgpOwotICAgIGVsc2UKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0KLSAgICAvLyBDaGVjayBpZiB0aGlzIGZyZXNobHkgYXBwZW5kZWQgY29udGVudCBt
YWtlcyB0aGUgbGluZSB2aXN1YWxseSBub24tZW1wdHkuCi0gICAgaWYgKG1faXNWaXN1YWxseUVt
cHR5ICYmICFtX3J1bnMuaXNFbXB0eSgpICYmIGlzUnVuVmlzdWFsbHlOb25FbXB0eShtX3J1bnMu
bGFzdCgpKSkKLSAgICAgICAgbV9pc1Zpc3VhbGx5RW1wdHkgPSBmYWxzZTsKLX0KLQotdm9pZCBM
aW5lQnVpbGRlcjo6YXBwZW5kTm9uQnJlYWthYmxlU3BhY2UoY29uc3QgSW5saW5lSXRlbSYgaW5s
aW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgpCi17Ci0gICAgbV9ydW5zLmFwcGVuZCh7IGlubGluZUl0ZW0sIGxvZ2ljYWxM
ZWZ0LCBsb2dpY2FsV2lkdGggfSk7Ci0gICAgbV9jb250ZW50TG9naWNhbFdpZHRoICs9IGxvZ2lj
YWxXaWR0aDsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kSW5saW5lQ29udGFpbmVyU3Rh
cnQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2Fs
V2lkdGgpCi17Ci0gICAgLy8gVGhpcyBpcyByZWFsbHkganVzdCBhIHBsYWNlaG9sZGVyIHRvIG1h
cmsgdGhlIHN0YXJ0IG9mIHRoZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyIDxzcGFuPi4KLSAgICBh
cHBlbmROb25CcmVha2FibGVTcGFjZShpbmxpbmVJdGVtLCBjb250ZW50TG9naWNhbFdpZHRoKCks
IGxvZ2ljYWxXaWR0aCk7Ci19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZElubGluZUNvbnRh
aW5lckVuZChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCkKLXsKLSAgICAvLyBUaGlzIGlzIHJlYWxseSBqdXN0IGEgcGxhY2Vob2xkZXIg
dG8gbWFyayB0aGUgZW5kIG9mIHRoZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyIDwvc3Bhbj4uCi0g
ICAgYXV0byByZW1vdmVUcmFpbGluZ0xldHRlclNwYWNpbmcgPSBbJl0gewotICAgICAgICBpZiAo
IW1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmlzVHJhaWxpbmdSdW5QYXJ0aWFsbHlUcmltbWFi
bGUoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9jb250ZW50TG9naWNhbFdpZHRo
IC09IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LnJlbW92ZVBhcnRpYWxseVRyaW1tYWJsZUNv
bnRlbnQoKTsKLSAgICB9OwotICAgIC8vIFByZXZlbnQgdHJhaWxpbmcgbGV0dGVyLXNwYWNpbmcg
ZnJvbSBzcGlsbGluZyBvdXQgb2YgdGhlIGlubGluZSBjb250YWluZXIuCi0gICAgLy8gaHR0cHM6
Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy10ZXh0LTMvI2xldHRlci1zcGFjaW5nLXByb3BlcnR5IFNl
ZSBleGFtcGxlIDIxLgotICAgIHJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZygpOwotICAgIGFw
cGVuZE5vbkJyZWFrYWJsZVNwYWNlKGlubGluZUl0ZW0sIGNvbnRlbnRMb2dpY2FsUmlnaHQoKSwg
bG9naWNhbFdpZHRoKTsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kVGV4dENvbnRlbnQo
Y29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxXaWR0aCwgYm9vbCBuZWVkc0h5cGhlbikKLXsKLSAgICBhdXRvIHdpbGxDb2xsYXBzZUNv
bXBsZXRlbHkgPSBbJl0gewotICAgICAgICBpZiAoIWlubGluZVRleHRJdGVtLmlzQ29sbGFwc2li
bGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKGlubGluZVRleHRJ
dGVtLmlzRW1wdHlDb250ZW50KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhlIGxhc3QgaXRlbSBpcyBjb2xsYXBzZWQgYXMgd2VsbC4KLSAgICAgICAg
Zm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKLSAgICAg
ICAgICAgIGlmIChydW4uaXNCb3goKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRleHQtMy8jd2hpdGUt
c3BhY2UtcGhhc2UtMQotICAgICAgICAgICAgLy8gQW55IGNvbGxhcHNpYmxlIHNwYWNlIGltbWVk
aWF0ZWx5IGZvbGxvd2luZyBhbm90aGVyIGNvbGxhcHNpYmxlIHNwYWNl4oCUZXZlbiBvbmUgb3V0
c2lkZSB0aGUgYm91bmRhcnkgb2YgdGhlIGlubGluZSBjb250YWluaW5nIHRoYXQgc3BhY2UsCi0g
ICAgICAgICAgICAvLyBwcm92aWRlZCBib3RoIHNwYWNlcyBhcmUgd2l0aGluIHRoZSBzYW1lIGlu
bGluZSBmb3JtYXR0aW5nIGNvbnRleHTigJRpcyBjb2xsYXBzZWQgdG8gaGF2ZSB6ZXJvIGFkdmFu
Y2Ugd2lkdGguCi0gICAgICAgICAgICAvLyA6ICI8c3Bhbj4gIDwvc3Bhbj4gIiA8LSB0aGUgdHJh
aWxpbmcgd2hpdGVzcGFjZSBjb2xsYXBzZXMgY29tcGxldGVseS4KLSAgICAgICAgICAgIC8vIE5v
dCB0aGF0IHdoZW4gdGhlIGlubGluZSBjb250YWluZXIgaGFzIHByZXNlcnZlIHdoaXRlc3BhY2Ug
c3R5bGUsICI8c3BhbiBzdHlsZT0id2hpdGUtc3BhY2U6IHByZSI+ICA8L3NwYW4+ICIgPC0gdGhp
cyB3aGl0ZXNwYWNlIHN0YXlzIGFyb3VuZC4KLSAgICAgICAgICAgIGlmIChydW4uaXNUZXh0KCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJ1bi5oYXNDb2xsYXBzaWJsZVRyYWlsaW5nV2hpdGVz
cGFjZSgpOwotICAgICAgICAgICAgQVNTRVJUKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVu
LmlzQ29udGFpbmVyRW5kKCkpOwotICAgICAgICB9Ci0gICAgICAgIC8vIExlYWRpbmcgd2hpdGVz
cGFjZS4KLSAgICAgICAgcmV0dXJuICFpc1doaXRlc3BhY2VQcmVzZXJ2ZWQoaW5saW5lVGV4dEl0
ZW0uc3R5bGUoKSk7Ci0gICAgfTsKLQotICAgIGlmICh3aWxsQ29sbGFwc2VDb21wbGV0ZWx5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gaW5saW5lVGV4dEl0ZW1OZWVkc05ld1J1biA9
IHRydWU7Ci0gICAgaWYgKCFtX3J1bnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGF1dG8mIGxhc3RS
dW4gPSBtX3J1bnMubGFzdCgpOwotICAgICAgICBpbmxpbmVUZXh0SXRlbU5lZWRzTmV3UnVuID0g
bGFzdFJ1bi5oYXNDb2xsYXBzZWRUcmFpbGluZ1doaXRlc3BhY2UoKSB8fCAhbGFzdFJ1bi5pc1Rl
eHQoKSB8fCAmbGFzdFJ1bi5sYXlvdXRCb3goKSAhPSAmaW5saW5lVGV4dEl0ZW0ubGF5b3V0Qm94
KCk7Ci0gICAgICAgIGlmICghaW5saW5lVGV4dEl0ZW1OZWVkc05ld1J1bikgewotICAgICAgICAg
ICAgbGFzdFJ1bi5leHBhbmQoaW5saW5lVGV4dEl0ZW0sIGxvZ2ljYWxXaWR0aCk7Ci0gICAgICAg
ICAgICBpZiAobmVlZHNIeXBoZW4pIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIWxhc3RSdW4u
dGV4dENvbnRlbnQoKS0+bmVlZHNIeXBoZW4oKSk7Ci0gICAgICAgICAgICAgICAgbGFzdFJ1bi5z
ZXROZWVkc0h5cGhlbigpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIGlm
IChpbmxpbmVUZXh0SXRlbU5lZWRzTmV3UnVuKQotICAgICAgICBtX3J1bnMuYXBwZW5kKHsgaW5s
aW5lVGV4dEl0ZW0sIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSwgbG9naWNhbFdpZHRoLCBuZWVkc0h5
cGhlbiB9KTsKLSAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gbG9naWNhbFdpZHRoOwotICAg
IC8vIFNldCB0aGUgdHJhaWxpbmcgdHJpbW1hYmxlIGNvbnRlbnQuCi0gICAgaWYgKGlubGluZVRl
eHRJdGVtLmlzV2hpdGVzcGFjZSgpICYmICFUZXh0VXRpbDo6c2hvdWxkUHJlc2VydmVUcmFpbGlu
Z1doaXRlc3BhY2UoaW5saW5lVGV4dEl0ZW0uc3R5bGUoKSkpIHsKLSAgICAgICAgbV90cmltbWFi
bGVUcmFpbGluZ0NvbnRlbnQuYWRkRnVsbHlUcmltbWFibGVDb250ZW50KG1fcnVucy5zaXplKCkg
LSAxLCBsb2dpY2FsV2lkdGgpOwotICAgICAgICAvLyBJZiB3ZSBldmVyIHRyaW0gdGhpcyBjb250
ZW50LCB3ZSBuZWVkIHRvIGtub3cgaWYgdGhlIGxpbmUgdmlzaWJpbGl0eSBzdGF0ZSBuZWVkcyB0
byBiZSByZWNvbXB1dGVkLgotICAgICAgICBpZiAobV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQu
aXNFbXB0eSgpKQotICAgICAgICAgICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1h
YmxlVHJhaWxpbmdDb250ZW50ID0gaXNWaXN1YWxseUVtcHR5KCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgLy8gQW55IG5vbi13aGl0ZXNwYWNlLCBuby10cmltbWFibGUgY29udGVudCBy
ZXNldHMgdGhlIGV4aXN0aW5nIHRyaW1tYWJsZS4KLSAgICBtX3RyaW1tYWJsZVRyYWlsaW5nQ29u
dGVudC5yZXNldCgpOwotICAgIGlmICghbV9zaG91bGRJZ25vcmVUcmFpbGluZ0xldHRlclNwYWNp
bmcgJiYgIWlubGluZVRleHRJdGVtLmlzV2hpdGVzcGFjZSgpICYmIGlubGluZVRleHRJdGVtLnN0
eWxlKCkubGV0dGVyU3BhY2luZygpID4gMCkKLSAgICAgICAgbV90cmltbWFibGVUcmFpbGluZ0Nv
bnRlbnQuYWRkUGFydGlhbGx5VHJpbW1hYmxlQ29udGVudChtX3J1bnMuc2l6ZSgpIC0gMSwgbG9n
aWNhbFdpZHRoKTsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kTm9uUmVwbGFjZWRJbmxp
bmVCb3goY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5pdCBsb2dp
Y2FsV2lkdGgpCi17Ci0gICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3go
KTsKLSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKLSAgICBhdXRvIGhvcml6b250YWxNYXJnaW4gPSBib3hHZW9tZXRy
eS5ob3Jpem9udGFsTWFyZ2luKCk7Ci0gICAgbV9ydW5zLmFwcGVuZCh7IGlubGluZUl0ZW0sIGNv
bnRlbnRMb2dpY2FsV2lkdGgoKSArIGhvcml6b250YWxNYXJnaW4uc3RhcnQsIGxvZ2ljYWxXaWR0
aCB9KTsKLSAgICBtX2NvbnRlbnRMb2dpY2FsV2lkdGggKz0gbG9naWNhbFdpZHRoICsgaG9yaXpv
bnRhbE1hcmdpbi5zdGFydCArIGhvcml6b250YWxNYXJnaW4uZW5kOwotICAgIG1fdHJpbW1hYmxl
VHJhaWxpbmdDb250ZW50LnJlc2V0KCk7Ci19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6OmFwcGVuZFJl
cGxhY2VkSW5saW5lQm94KGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0sIElubGluZUxheW91
dFVuaXQgbG9naWNhbFdpZHRoKQotewotICAgIEFTU0VSVChpbmxpbmVJdGVtLmxheW91dEJveCgp
LmlzUmVwbGFjZWRCb3goKSk7Ci0gICAgLy8gRklYTUU6IFN1cmVseSByZXBsYWNlZCBib3hlcyBi
ZWhhdmUgZGlmZmVyZW50bHkuCi0gICAgYXBwZW5kTm9uUmVwbGFjZWRJbmxpbmVCb3goaW5saW5l
SXRlbSwgbG9naWNhbFdpZHRoKTsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6YXBwZW5kTGluZUJy
ZWFrKGNvbnN0IElubGluZUl0ZW0mIGlubGluZUl0ZW0pCi17Ci0gICAgaWYgKGlubGluZUl0ZW0u
aXNIYXJkTGluZUJyZWFrKCkpCi0gICAgICAgIHJldHVybiBtX3J1bnMuYXBwZW5kKHsgaW5saW5l
SXRlbSwgY29udGVudExvZ2ljYWxXaWR0aCgpLCAwX2x1IH0pOwotICAgIC8vIFNvZnQgbGluZSBi
cmVha3MgKHByZXNlcnZlZCBuZXcgbGluZSBjaGFyYWN0ZXJzKSByZXF1aXJlIGlubGluZSB0ZXh0
IGJveGVzIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMuCi0gICAgQVNTRVJUKGlubGluZUl0ZW0u
aXNTb2Z0TGluZUJyZWFrKCkpOwotICAgIG1fcnVucy5hcHBlbmQoeyBkb3duY2FzdDxJbmxpbmVT
b2Z0TGluZUJyZWFrSXRlbT4oaW5saW5lSXRlbSksIGNvbnRlbnRMb2dpY2FsV2lkdGgoKSB9KTsK
LX0KLQotYm9vbCBMaW5lQnVpbGRlcjo6aXNSdW5WaXN1YWxseU5vbkVtcHR5KGNvbnN0IFJ1biYg
cnVuKSBjb25zdAotewotICAgIGlmIChydW4uaXNUZXh0KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGNoZWNrIHdoZXRoZXIgdGhlIGlubGluZSBj
b250YWluZXIgaGFzIGNvbnRlbnQuIEl0IHNpbXBseSBjaGVja3MgaWYgdGhlIGNvbnRhaW5lciBp
dHNlbGYgaXMgY29uc2lkZXJlZCBub24tZW1wdHkuCi0gICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKLSAgICAgICAgaWYgKCFydW4ubG9naWNh
bFdpZHRoKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIE1hcmdpbiBk
b2VzIG5vdCBtYWtlIHRoZSBjb250YWluZXIgdmlzdWFsbHkgbm9uLWVtcHR5LiBDaGVjayBpZiBp
dCBoYXMgYm9yZGVyIG9yIHBhZGRpbmcuCi0gICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChydW4ubGF5b3V0Qm94KCkpOwotICAgICAg
ICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkKLSAgICAgICAgICAgIHJldHVybiBib3hHZW9t
ZXRyeS5ib3JkZXJMZWZ0KCkgfHwgKGJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkgJiYgYm94R2Vv
bWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZSgpKTsKLSAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5
LmJvcmRlclJpZ2h0KCkgfHwgKGJveEdlb21ldHJ5LnBhZGRpbmdSaWdodCgpICYmIGJveEdlb21l
dHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlKCkpOwotICAgIH0KLQotICAgIGlmIChydW4uaXNCb3go
KSkgewotICAgICAgICBpZiAocnVuLmxheW91dEJveCgpLmlzUmVwbGFjZWRCb3goKSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBBU1NFUlQocnVuLmxheW91dEJveCgpLmlzSW5s
aW5lQmxvY2tCb3goKSB8fCBydW4ubGF5b3V0Qm94KCkuaXNJbmxpbmVUYWJsZUJveCgpKTsKLSAg
ICAgICAgcmV0dXJuIHJ1bi5sb2dpY2FsV2lkdGgoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0JiBMaW5lQnVpbGRlcjo6Zm9ybWF0dGluZ0NvbnRleHQoKSBjb25zdAotewotICAg
IHJldHVybiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwotfQotCi1MaW5lQnVpbGRlcjo6VHJp
bW1hYmxlVHJhaWxpbmdDb250ZW50OjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQoUnVuTGlzdCYg
cnVucykKLSAgICA6IG1fcnVucyhydW5zKQotewotfQotCi12b2lkIExpbmVCdWlsZGVyOjpUcmlt
bWFibGVUcmFpbGluZ0NvbnRlbnQ6OmFkZEZ1bGx5VHJpbW1hYmxlQ29udGVudChzaXplX3QgcnVu
SW5kZXgsIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpCi17Ci0gICAgLy8gQW55IHN1
YnNlcXVlbnQgdHJpbW1hYmxlIHdoaXRlc3BhY2Ugc2hvdWxkIGNvbGxhcHNlIHRvIHplcm8gYWR2
YW5jZWQgd2lkdGggYW5kIGlnbm9yZWQgYXQgOjphcHBlbmRUZXh0Q29udGVudCgpLgotICAgIEFT
U0VSVCghbV9oYXNGdWxseVRyaW1tYWJsZUNvbnRlbnQpOwotICAgIG1fZnVsbHlUcmltbWFibGVX
aWR0aCA9IHRyaW1tYWJsZVdpZHRoOwotICAgIC8vIE5vdGUgdGhhdCBqdXN0IGJlY2F1c2UgdGhl
IHRyaW1tYWJsZSB3aWR0aCBpcyAwIChmb250LXNpemU6IDBweCksIGl0IGRvZXMgbm90IG1lYW4g
d2UgZG9uJ3QgaGF2ZSBhIHRyaW1tYWJsZSB0cmFpbGluZyBjb250ZW50LgotICAgIG1faGFzRnVs
bHlUcmltbWFibGVDb250ZW50ID0gdHJ1ZTsKLSAgICBtX2ZpcnN0UnVuSW5kZXggPSBtX2ZpcnN0
UnVuSW5kZXgudmFsdWVPcihydW5JbmRleCk7Ci19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6OlRyaW1t
YWJsZVRyYWlsaW5nQ29udGVudDo6YWRkUGFydGlhbGx5VHJpbW1hYmxlQ29udGVudChzaXplX3Qg
cnVuSW5kZXgsIElubGluZUxheW91dFVuaXQgdHJpbW1hYmxlV2lkdGgpCi17Ci0gICAgLy8gRG8g
bm90IGFkZCB0cmltbWFibGUgbGV0dGVyIHNwYWNpbmcgYWZ0ZXIgYSBmdWxseSB0cmltbWFibGUg
d2hpdGVzcGFjZS4KLSAgICBBU1NFUlQoIW1fZmlyc3RSdW5JbmRleCk7Ci0gICAgQVNTRVJUKCFt
X2hhc0Z1bGx5VHJpbW1hYmxlQ29udGVudCk7Ci0gICAgQVNTRVJUKCFtX3BhcnRpYWxseVRyaW1t
YWJsZVdpZHRoKTsKLSAgICBBU1NFUlQodHJpbW1hYmxlV2lkdGgpOwotICAgIG1fcGFydGlhbGx5
VHJpbW1hYmxlV2lkdGggPSB0cmltbWFibGVXaWR0aDsKLSAgICBtX2ZpcnN0UnVuSW5kZXggPSBy
dW5JbmRleDsKLX0KLQotSW5saW5lTGF5b3V0VW5pdCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJh
aWxpbmdDb250ZW50OjpyZW1vdmUoKQotewotICAgIC8vIFJlbW92ZSB0cmltbWFibGUgdHJhaWxp
bmcgY29udGVudCBhbmQgbW92ZSBhbGwgdGhlIHN1YnNlcXVlbnQgdHJhaWxpbmcgcnVucy4KLSAg
ICAvLyA8c3Bhbj4gPC9zcGFuPjxzcGFuPjwvc3Bhbj4KLSAgICAvLyBbdHJhaWxpbmcgd2hpdGVz
cGFjZV1bY29udGFpbmVyIGVuZF1bY29udGFpbmVyIHN0YXJ0XVtjb250YWluZXIgZW5kXQotICAg
IC8vIFRyaW0gdGhlIHdoaXRlc3BhY2UgcnVuIGFuZCBtb3ZlIHRoZSB0cmFpbGluZyBpbmxpbmUg
Y29udGFpbmVyIHJ1bnMgdG8gdGhlIGxvZ2ljYWwgbGVmdC4KLSAgICBBU1NFUlQoIWlzRW1wdHko
KSk7Ci0gICAgYXV0byYgdHJpbW1hYmxlUnVuID0gbV9ydW5zWyptX2ZpcnN0UnVuSW5kZXhdOwot
ICAgIEFTU0VSVCh0cmltbWFibGVSdW4uaXNUZXh0KCkpOwotCi0gICAgaWYgKG1faGFzRnVsbHlU
cmltbWFibGVDb250ZW50KQotICAgICAgICB0cmltbWFibGVSdW4ucmVtb3ZlVHJhaWxpbmdXaGl0
ZXNwYWNlKCk7Ci0gICAgaWYgKG1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGgpCi0gICAgICAgIHRy
aW1tYWJsZVJ1bi5yZW1vdmVUcmFpbGluZ0xldHRlclNwYWNpbmcoKTsKLQotICAgIGF1dG8gdHJp
bW1hYmxlV2lkdGggPSB3aWR0aCgpOwotICAgIGZvciAoYXV0byBpbmRleCA9ICptX2ZpcnN0UnVu
SW5kZXggKyAxOyBpbmRleCA8IG1fcnVucy5zaXplKCk7ICsraW5kZXgpIHsKLSAgICAgICAgYXV0
byYgcnVuID0gbV9ydW5zW2luZGV4XTsKLSAgICAgICAgQVNTRVJUKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpOwotICAg
ICAgICBydW4ubW92ZUhvcml6b250YWxseSgtdHJpbW1hYmxlV2lkdGgpOwotICAgIH0KLSAgICBy
ZXNldCgpOwotICAgIHJldHVybiB0cmltbWFibGVXaWR0aDsKLX0KLQotSW5saW5lTGF5b3V0VW5p
dCBMaW5lQnVpbGRlcjo6VHJpbW1hYmxlVHJhaWxpbmdDb250ZW50OjpyZW1vdmVQYXJ0aWFsbHlU
cmltbWFibGVDb250ZW50KCkKLXsKLSAgICAvLyBQYXJ0aWFsbHkgdHJpbW1hYmxlIGNvbnRlbnQg
aXMgYWx3YXlzIGdhdGVkIGJ5IGEgZnVsbHkgdHJpbW1hYmxlIGNvbnRlbnQuCi0gICAgLy8gV2Ug
Y2FuJ3QganVzdCB0cmltIHNwYWNpbmcgaW4gdGhlIG1pZGRsZS4KLSAgICBBU1NFUlQoIW1fZnVs
bHlUcmltbWFibGVXaWR0aCk7Ci0gICAgcmV0dXJuIHJlbW92ZSgpOwotfQotCi1MaW5lQnVpbGRl
cjo6UnVuOjpSdW4oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSwgSW5saW5lTGF5b3V0VW5p
dCBsb2dpY2FsTGVmdCwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpCi0gICAgOiBtX3R5
cGUoaW5saW5lSXRlbS50eXBlKCkpCi0gICAgLCBtX2xheW91dEJveCgmaW5saW5lSXRlbS5sYXlv
dXRCb3goKSkKLSAgICAsIG1fbG9naWNhbExlZnQobG9naWNhbExlZnQpCi0gICAgLCBtX2xvZ2lj
YWxXaWR0aChsb2dpY2FsV2lkdGgpCi17Ci19Ci0KLUxpbmVCdWlsZGVyOjpSdW46OlJ1bihjb25z
dCBJbmxpbmVTb2Z0TGluZUJyZWFrSXRlbSYgc29mdExpbmVCcmVha0l0ZW0sIElubGluZUxheW91
dFVuaXQgbG9naWNhbExlZnQpCi0gICAgOiBtX3R5cGUoc29mdExpbmVCcmVha0l0ZW0udHlwZSgp
KQotICAgICwgbV9sYXlvdXRCb3goJnNvZnRMaW5lQnJlYWtJdGVtLmxheW91dEJveCgpKQotICAg
ICwgbV9sb2dpY2FsTGVmdChsb2dpY2FsTGVmdCkKLSAgICAsIG1fdGV4dENvbnRlbnQoeyBzb2Z0
TGluZUJyZWFrSXRlbS5wb3NpdGlvbigpLCAxLCBzb2Z0TGluZUJyZWFrSXRlbS5pbmxpbmVUZXh0
Qm94KCkuY29udGVudCgpLCBmYWxzZSB9KQotewotfQotCi1MaW5lQnVpbGRlcjo6UnVuOjpSdW4o
Y29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtLCBJbmxpbmVMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0LCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBuZWVkc0h5cGhl
bikKLSAgICA6IG1fdHlwZShJbmxpbmVJdGVtOjpUeXBlOjpUZXh0KQotICAgICwgbV9sYXlvdXRC
b3goJmlubGluZVRleHRJdGVtLmxheW91dEJveCgpKQotICAgICwgbV9sb2dpY2FsTGVmdChsb2dp
Y2FsTGVmdCkKLSAgICAsIG1fbG9naWNhbFdpZHRoKGxvZ2ljYWxXaWR0aCkKLSAgICAsIG1fdHJh
aWxpbmdXaGl0ZXNwYWNlVHlwZSh0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGlubGluZVRleHRJdGVt
KSkKLSAgICAsIG1fdGV4dENvbnRlbnQoeyBpbmxpbmVUZXh0SXRlbS5zdGFydCgpLCBtX3RyYWls
aW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpDb2xsYXBzZWQgPyAxIDog
aW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCksIGlubGluZVRleHRJdGVtLmlubGluZVRleHRCb3goKS5j
b250ZW50KCksIG5lZWRzSHlwaGVuIH0pCi17Ci0gICAgaWYgKG1fdHJhaWxpbmdXaGl0ZXNwYWNl
VHlwZSAhPSBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmUpIHsKLSAgICAgICAgbV90cmFpbGluZ1do
aXRlc3BhY2VXaWR0aCA9IGxvZ2ljYWxXaWR0aDsKLSAgICAgICAgaWYgKCFpc1doaXRlc3BhY2VQ
cmVzZXJ2ZWQoaW5saW5lVGV4dEl0ZW0uc3R5bGUoKSkpCi0gICAgICAgICAgICBtX2V4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQgPSAxOwotICAgIH0KLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6UnVu
OjpleHBhbmQoY29uc3QgSW5saW5lVGV4dEl0ZW0mIGlubGluZVRleHRJdGVtLCBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHZlcnkgc2lt
cGxlIGV4cGFuc2lvbiBtZXJnZS4gV2Ugc2hvdWxkIGV2ZW50dWFsbHkgc3dpdGNoIG92ZXIgdG8g
Rm9udENhc2NhZGU6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQuCi0gICAgQVNTRVJUKCFoYXND
b2xsYXBzZWRUcmFpbGluZ1doaXRlc3BhY2UoKSk7Ci0gICAgQVNTRVJUKGlzVGV4dCgpICYmIGlu
bGluZVRleHRJdGVtLmlzVGV4dCgpKTsKLSAgICBBU1NFUlQobV9sYXlvdXRCb3ggPT0gJmlubGlu
ZVRleHRJdGVtLmxheW91dEJveCgpKTsKLQotICAgIG1fbG9naWNhbFdpZHRoICs9IGxvZ2ljYWxX
aWR0aDsKLSAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPSB0cmFpbGluZ1doaXRlc3BhY2VU
eXBlKGlubGluZVRleHRJdGVtKTsKLQotICAgIGlmIChtX3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUg
PT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lKSB7Ci0gICAgICAgIG1fdHJhaWxpbmdXaGl0ZXNw
YWNlV2lkdGggPSB7IH07Ci0gICAgICAgIHNldEV4cGFuc2lvbkJlaGF2aW9yKEFsbG93TGVmdEV4
cGFuc2lvbiB8IEFsbG93UmlnaHRFeHBhbnNpb24pOwotICAgICAgICBtX3RleHRDb250ZW50LT5l
eHBhbmQoaW5saW5lVGV4dEl0ZW0ubGVuZ3RoKCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggKz0gbG9naWNhbFdpZHRoOwotICAgIGlmICgh
aXNXaGl0ZXNwYWNlUHJlc2VydmVkKGlubGluZVRleHRJdGVtLnN0eWxlKCkpKQotICAgICAgICAr
K21fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKLSAgICBzZXRFeHBhbnNpb25CZWhhdmlvcihE
ZWZhdWx0RXhwYW5zaW9uKTsKLSAgICBtX3RleHRDb250ZW50LT5leHBhbmQobV90cmFpbGluZ1do
aXRlc3BhY2VUeXBlID09IFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkID8gMSA6IGlubGlu
ZVRleHRJdGVtLmxlbmd0aCgpKTsKLX0KLQotYm9vbCBMaW5lQnVpbGRlcjo6UnVuOjpoYXNUcmFp
bGluZ0xldHRlclNwYWNpbmcoKSBjb25zdAotewotICAgIC8vIENvbXBsZXggbGluZSBsYXlvdXQg
ZG9lcyBub3Qga2VlcCB0cmFjayBvZiB0cmFpbGluZyBsZXR0ZXIgc3BhY2luZy4KLSAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5n
Q29udGV4dEludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuICFoYXNUcmFpbGluZ1doaXRlc3BhY2UoKSAmJiBzdHlsZSgpLmxldHRlclNwYWNpbmco
KSA+IDA7Ci19Ci0KLUlubGluZUxheW91dFVuaXQgTGluZUJ1aWxkZXI6OlJ1bjo6dHJhaWxpbmdM
ZXR0ZXJTcGFjaW5nKCkgY29uc3QKLXsKLSAgICBpZiAoIWhhc1RyYWlsaW5nTGV0dGVyU3BhY2lu
ZygpKQotICAgICAgICByZXR1cm4gMF9sdTsKLSAgICByZXR1cm4gSW5saW5lTGF5b3V0VW5pdCB7
IHN0eWxlKCkubGV0dGVyU3BhY2luZygpIH07Ci19Ci0KLXZvaWQgTGluZUJ1aWxkZXI6OlJ1bjo6
cmVtb3ZlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKCkKLXsKLSAgICBBU1NFUlQoaGFzVHJhaWxpbmdM
ZXR0ZXJTcGFjaW5nKCkpOwotICAgIHNocmlua0hvcml6b250YWxseSh0cmFpbGluZ0xldHRlclNw
YWNpbmcoKSk7Ci0gICAgQVNTRVJUKGxvZ2ljYWxXaWR0aCgpID4gMCB8fCAoIWxvZ2ljYWxXaWR0
aCgpICYmIHN0eWxlKCkubGV0dGVyU3BhY2luZygpID49IGludE1heEZvckxheW91dFVuaXQpKTsK
LX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpyZW1vdmVUcmFpbGluZ1doaXRlc3BhY2UoKQot
ewotICAgIC8vIEFjY29yZGluZyB0byBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXRleHQtMy8j
d2hpdGUtc3BhY2UtcHJvcGVydHkgbWF0cml4Ci0gICAgLy8gVHJpbW1hYmxlIHdoaXRlc3BhY2Ug
aXMgYWx3YXlzIGNvbGxhcHNpYmxlIHNvIHRoZSBsZW5ndGggb2YgdGhlIHRyYWlsaW5nIHRyaW1t
YWJsZSB3aGl0ZXNwYWNlIGlzIGFsd2F5cyAxIChvciBub24tZXhpc3RlbnQpLgotICAgIEFTU0VS
VChtX3RleHRDb250ZW50LT5sZW5ndGgoKSk7Ci0gICAgY29uc3RleHByIHNpemVfdCB0cmFpbGlu
Z1RyaW1tYWJsZUNvbnRlbnRMZW5ndGggPSAxOwotICAgIG1fdGV4dENvbnRlbnQtPnNocmluayh0
cmFpbGluZ1RyaW1tYWJsZUNvbnRlbnRMZW5ndGgpOwotICAgIHZpc3VhbGx5Q29sbGFwc2VUcmFp
bGluZ1doaXRlc3BhY2UoKTsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjp2aXN1YWxseUNv
bGxhcHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCkKLXsKLSAgICAvLyBUaGlzIGlzIGp1c3QgYSB2aXN1
YWwgYWRqdXN0bWVudCwgdGhlIHRleHQgbGVuZ3RoIHNob3VsZCByZW1haW4gdGhlIHNhbWUuCi0g
ICAgc2hyaW5rSG9yaXpvbnRhbGx5KG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgpOwotICAgIG1f
dHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSB7IH07Ci0gICAgbV90cmFpbGluZ1doaXRlc3BhY2VU
eXBlID0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25lOwotCi0gICAgaWYgKCFpc1doaXRlc3BhY2VQ
cmVzZXJ2ZWQoc3R5bGUoKSkpIHsKLSAgICAgICAgQVNTRVJUKG1fZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudCk7Ci0gICAgICAgIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0tOwotICAgIH0K
LSAgICBzZXRFeHBhbnNpb25CZWhhdmlvcihBbGxvd0xlZnRFeHBhbnNpb24gfCBBbGxvd1JpZ2h0
RXhwYW5zaW9uKTsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpzZXRFeHBhbnNpb25CZWhh
dmlvcihFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvcikKLXsKLSAgICBBU1NFUlQo
aXNUZXh0KCkpOwotICAgIG1fZXhwYW5zaW9uLmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3I7
Ci19Ci0KLUV4cGFuc2lvbkJlaGF2aW9yIExpbmVCdWlsZGVyOjpSdW46OmV4cGFuc2lvbkJlaGF2
aW9yKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoaXNUZXh0KCkpOwotICAgIHJldHVybiBtX2V4cGFu
c2lvbi5iZWhhdmlvcjsKLX0KLQotdm9pZCBMaW5lQnVpbGRlcjo6UnVuOjpzZXRIb3Jpem9udGFs
RXhwYW5zaW9uKElubGluZUxheW91dFVuaXQgbG9naWNhbEV4cGFuc2lvbikKLXsKLSAgICBBU1NF
UlQoaXNUZXh0KCkpOwotICAgIEFTU0VSVChoYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKTsKLSAg
ICBtX2V4cGFuc2lvbi5ob3Jpem9udGFsRXhwYW5zaW9uID0gbG9naWNhbEV4cGFuc2lvbjsKLX0K
LQotfQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0YmE2MWNmZDQ1ODQxNDhlYTY4NzFiZjkwYjExNTFlMDY0MWJkNDIyLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwyMTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJEaXNwbGF5UnVuLmgi
Ci0jaW5jbHVkZSAiSW5saW5lSXRlbS5oIgotI2luY2x1ZGUgIklubGluZVRleHRJdGVtLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1jbGFzcyBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDsKLWNsYXNzIElubGluZVNvZnRMaW5lQnJlYWtJdGVtOwotCi1jbGFz
cyBMaW5lQnVpbGRlciB7Ci1wdWJsaWM6Ci0gICAgTGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQmKTsKLSAgICB+TGluZUJ1aWxkZXIoKTsKLQotICAgIHZvaWQgb3BlbihJ
bmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCk7Ci0gICAgdm9pZCBjbG9zZShi
b29sIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7Ci0gICAgdm9pZCBjbGVhckNvbnRlbnQo
KTsKLQotICAgIHZvaWQgc2V0SGFzSW50cnVzaXZlRmxvYXQoYm9vbCBoYXNJbnRydXNpdmVGbG9h
dCkgeyBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gaGFzSW50cnVzaXZlRmxvYXQ7IH0KLSAgICBib29s
IGhhc0ludHJ1c2l2ZUZsb2F0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNJbnRydXNpdmVGbG9hdDsg
fQotCi0gICAgdm9pZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQg
bG9naWNhbFdpZHRoKTsKLSAgICB2b2lkIGFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJdGVtKGNv
bnN0IElubGluZVRleHRJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wg
bmVlZHNIeXBlbik7Ci0KLSAgICBib29sIGlzVmlzdWFsbHlFbXB0eSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNWaXN1YWxseUVtcHR5OyB9Ci0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGxpbmVMb2dpY2Fs
V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVMb2dpY2FsV2lkdGg7IH0KLSAgICBJbmxpbmVM
YXlvdXRVbml0IGNvbnRlbnRMb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRM
b2dpY2FsV2lkdGg7IH0KLSAgICBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKCkgY29u
c3QgeyByZXR1cm4gbGluZUxvZ2ljYWxXaWR0aCgpIC0gY29udGVudExvZ2ljYWxXaWR0aCgpOyB9
Ci0KLSAgICBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJsZVRyYWlsaW5nV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudC53aWR0aCgpOyB9Ci0gICAgYm9vbCBp
c1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKSBjb25zdCB7IHJldHVybiBtX3RyaW1tYWJsZVRy
YWlsaW5nQ29udGVudC5pc1RyYWlsaW5nUnVuRnVsbHlUcmltbWFibGUoKTsgfQotCi0gICAgdm9p
ZCBtb3ZlTG9naWNhbExlZnQoSW5saW5lTGF5b3V0VW5pdCk7Ci0gICAgdm9pZCBtb3ZlTG9naWNh
bFJpZ2h0KElubGluZUxheW91dFVuaXQpOwotCi0gICAgc3RydWN0IFJ1biB7Ci0gICAgICAgIGJv
b2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OlRl
eHQ7IH0KLSAgICAgICAgYm9vbCBpc0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBJbmxp
bmVJdGVtOjpUeXBlOjpCb3g7IH0KLSAgICAgICAgYm9vbCBpc0xpbmVCcmVhaygpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJyZWFrIHx8IG1fdHlw
ZSA9PSBJbmxpbmVJdGVtOjpUeXBlOjpTb2Z0TGluZUJyZWFrOyB9Ci0gICAgICAgIGJvb2wgaXND
b250YWluZXJTdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBJbmxpbmVJdGVtOjpUeXBl
OjpDb250YWluZXJTdGFydDsgfQotICAgICAgICBib29sIGlzQ29udGFpbmVyRW5kKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlID09IElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lckVuZDsgfQotCi0g
ICAgICAgIGNvbnN0IEJveCYgbGF5b3V0Qm94KCkgY29uc3QgeyByZXR1cm4gKm1fbGF5b3V0Qm94
OyB9Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGF5b3V0Qm94LT5zdHlsZSgpOyB9Ci0gICAgICAgIGNvbnN0IE9wdGlvbmFsPERpc3BsYXk6OlJ1
bjo6VGV4dENvbnRlbnQ+JiB0ZXh0Q29udGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dENvbnRl
bnQ7IH0KLQotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9naWNhbFdpZHRoOyB9Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbG9naWNh
bExlZnQoKSBjb25zdCB7IHJldHVybiBtX2xvZ2ljYWxMZWZ0OyB9Ci0gICAgICAgIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbG9naWNhbExlZnQoKSArIGxv
Z2ljYWxXaWR0aCgpOyB9Ci0KLSAgICAgICAgY29uc3QgRGlzcGxheTo6UnVuOjpFeHBhbnNpb24m
IGV4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uOyB9Ci0gICAgICAgIGJvb2wg
aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQ7IH0KLSAgICAgICAgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZp
b3IoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsgfQotCi0gICAgICAg
IGJvb2wgaGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90cmFpbGluZ1do
aXRlc3BhY2VUeXBlICE9IFRyYWlsaW5nV2hpdGVzcGFjZTo6Tm9uZTsgfQotICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IHRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV90
cmFpbGluZ1doaXRlc3BhY2VXaWR0aDsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgZnJpZW5k
IGNsYXNzIExpbmVCdWlsZGVyOwotCi0gICAgICAgIFJ1bihjb25zdCBJbmxpbmVUZXh0SXRlbSYs
IElubGluZUxheW91dFVuaXQgbG9naWNhbExlZnQsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdp
ZHRoLCBib29sIG5lZWRzSHlwZW4pOwotICAgICAgICBSdW4oY29uc3QgSW5saW5lU29mdExpbmVC
cmVha0l0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0KTsKLSAgICAgICAgUnVuKGNv
bnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBJbmxpbmVMYXlv
dXRVbml0IGxvZ2ljYWxXaWR0aCk7Ci0KLSAgICAgICAgdm9pZCBleHBhbmQoY29uc3QgSW5saW5l
VGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7Ci0gICAgICAgIHZvaWQg
bW92ZUhvcml6b250YWxseShJbmxpbmVMYXlvdXRVbml0IG9mZnNldCkgeyBtX2xvZ2ljYWxMZWZ0
ICs9IG9mZnNldDsgfQotICAgICAgICB2b2lkIHNocmlua0hvcml6b250YWxseShJbmxpbmVMYXlv
dXRVbml0IHdpZHRoKSB7IG1fbG9naWNhbFdpZHRoIC09IHdpZHRoOyB9Ci0gICAgICAgIHZvaWQg
c2V0RXhwYW5zaW9uQmVoYXZpb3IoRXhwYW5zaW9uQmVoYXZpb3IpOwotICAgICAgICB2b2lkIHNl
dEhvcml6b250YWxFeHBhbnNpb24oSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsRXhwYW5zaW9uKTsK
LSAgICAgICAgdm9pZCBzZXROZWVkc0h5cGhlbigpIHsgbV90ZXh0Q29udGVudC0+c2V0TmVlZHNI
eXBoZW4oKTsgfQotCi0gICAgICAgIGVudW0gY2xhc3MgVHJhaWxpbmdXaGl0ZXNwYWNlIHsKLSAg
ICAgICAgICAgIE5vbmUsCi0gICAgICAgICAgICBOb3RDb2xsYXBzaWJsZSwKLSAgICAgICAgICAg
IENvbGxhcHNpYmxlLAotICAgICAgICAgICAgQ29sbGFwc2VkCi0gICAgICAgIH07Ci0gICAgICAg
IGJvb2wgaGFzQ29sbGFwc2libGVUcmFpbGluZ1doaXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBt
X3RyYWlsaW5nV2hpdGVzcGFjZVR5cGUgPT0gVHJhaWxpbmdXaGl0ZXNwYWNlOjpDb2xsYXBzaWJs
ZSB8fCBoYXNDb2xsYXBzZWRUcmFpbGluZ1doaXRlc3BhY2UoKTsgfQotICAgICAgICBib29sIGhh
c0NvbGxhcHNlZFRyYWlsaW5nV2hpdGVzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhaWxpbmdX
aGl0ZXNwYWNlVHlwZSA9PSBUcmFpbGluZ1doaXRlc3BhY2U6OkNvbGxhcHNlZDsgfQotICAgICAg
ICBUcmFpbGluZ1doaXRlc3BhY2UgdHJhaWxpbmdXaGl0ZXNwYWNlVHlwZShjb25zdCBJbmxpbmVU
ZXh0SXRlbSYpIGNvbnN0OwotICAgICAgICB2b2lkIHJlbW92ZVRyYWlsaW5nV2hpdGVzcGFjZSgp
OwotICAgICAgICB2b2lkIHZpc3VhbGx5Q29sbGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKTsKLQot
ICAgICAgICBib29sIGhhc1RyYWlsaW5nTGV0dGVyU3BhY2luZygpIGNvbnN0OwotICAgICAgICBJ
bmxpbmVMYXlvdXRVbml0IHRyYWlsaW5nTGV0dGVyU3BhY2luZygpIGNvbnN0OwotICAgICAgICB2
b2lkIHJlbW92ZVRyYWlsaW5nTGV0dGVyU3BhY2luZygpOwotCi0gICAgICAgIElubGluZUl0ZW06
OlR5cGUgbV90eXBlIHsgSW5saW5lSXRlbTo6VHlwZTo6VGV4dCB9OwotICAgICAgICBjb25zdCBC
b3gqIG1fbGF5b3V0Qm94IHsgbnVsbHB0ciB9OwotICAgICAgICBJbmxpbmVMYXlvdXRVbml0IG1f
bG9naWNhbExlZnQgeyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbV9sb2dpY2FsV2lk
dGggeyAwIH07Ci0gICAgICAgIFRyYWlsaW5nV2hpdGVzcGFjZSBtX3RyYWlsaW5nV2hpdGVzcGFj
ZVR5cGUgeyBUcmFpbGluZ1doaXRlc3BhY2U6Ok5vbmUgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0
VW5pdCBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoIHsgMCB9OwotICAgICAgICBPcHRpb25hbDxE
aXNwbGF5OjpSdW46OlRleHRDb250ZW50PiBtX3RleHRDb250ZW50OwotICAgICAgICBEaXNwbGF5
OjpSdW46OkV4cGFuc2lvbiBtX2V4cGFuc2lvbjsKLSAgICAgICAgdW5zaWduZWQgbV9leHBhbnNp
b25PcHBvcnR1bml0eUNvdW50IHsgMCB9OwotICAgIH07Ci0gICAgdXNpbmcgUnVuTGlzdCA9IFZl
Y3RvcjxSdW4sIDEwPjsKLSAgICBjb25zdCBSdW5MaXN0JiBydW5zKCkgY29uc3QgeyByZXR1cm4g
bV9ydW5zOyB9Ci0KLXByaXZhdGU6Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNh
bFJpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lTG9naWNhbExlZnQgKyBtX2NvbnRlbnRMb2dp
Y2FsV2lkdGg7IH0KLQotICAgIHN0cnVjdCBJbmxpbmVSdW5EZXRhaWxzIHsKLSAgICAgICAgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgICAgIGJvb2wgbmVlZHNIeXBo
ZW4geyBmYWxzZSB9OwotICAgIH07Ci0gICAgdm9pZCBhcHBlbmRXaXRoKGNvbnN0IElubGluZUl0
ZW0mLCBjb25zdCBJbmxpbmVSdW5EZXRhaWxzJik7Ci0gICAgdm9pZCBhcHBlbmROb25CcmVha2Fi
bGVTcGFjZShjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwg
SW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwotICAgIHZvaWQgYXBwZW5kVGV4dENvbnRl
bnQoY29uc3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwg
Ym9vbCBuZWVkc0h5cGhlbik7Ci0gICAgdm9pZCBhcHBlbmROb25SZXBsYWNlZElubGluZUJveChj
b25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgpOwotICAgIHZv
aWQgYXBwZW5kUmVwbGFjZWRJbmxpbmVCb3goY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91
dFVuaXQgbG9naWNhbFdpZHRoKTsKLSAgICB2b2lkIGFwcGVuZElubGluZUNvbnRhaW5lclN0YXJ0
KGNvbnN0IElubGluZUl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCk7Ci0gICAg
dm9pZCBhcHBlbmRJbmxpbmVDb250YWluZXJFbmQoY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxh
eW91dFVuaXQgbG9naWNhbFdpZHRoKTsKLSAgICB2b2lkIGFwcGVuZExpbmVCcmVhayhjb25zdCBJ
bmxpbmVJdGVtJik7Ci0KLSAgICB2b2lkIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgp
OwotICAgIHZvaWQgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKLQot
ICAgIGJvb2wgaXNSdW5WaXN1YWxseU5vbkVtcHR5KGNvbnN0IFJ1biYpIGNvbnN0OwotICAgIGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0Owot
Ci0gICAgc3RydWN0IFRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCB7Ci0gICAgICAgIFRyaW1tYWJs
ZVRyYWlsaW5nQ29udGVudChSdW5MaXN0Jik7Ci0KLSAgICAgICAgdm9pZCBhZGRGdWxseVRyaW1t
YWJsZUNvbnRlbnQoc2l6ZV90IHJ1bkluZGV4LCBJbmxpbmVMYXlvdXRVbml0IHRyaW1tYWJsZVdp
ZHRoKTsKLSAgICAgICAgdm9pZCBhZGRQYXJ0aWFsbHlUcmltbWFibGVDb250ZW50KHNpemVfdCBy
dW5JbmRleCwgSW5saW5lTGF5b3V0VW5pdCB0cmltbWFibGVXaWR0aCk7Ci0gICAgICAgIElubGlu
ZUxheW91dFVuaXQgcmVtb3ZlKCk7Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgcmVtb3ZlUGFy
dGlhbGx5VHJpbW1hYmxlQ29udGVudCgpOwotCi0gICAgICAgIElubGluZUxheW91dFVuaXQgd2lk
dGgoKSBjb25zdCB7IHJldHVybiBtX2Z1bGx5VHJpbW1hYmxlV2lkdGggKyBtX3BhcnRpYWxseVRy
aW1tYWJsZVdpZHRoOyB9Ci0gICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFt
X2ZpcnN0UnVuSW5kZXguaGFzVmFsdWUoKTsgfQotICAgICAgICBib29sIGlzVHJhaWxpbmdSdW5G
dWxseVRyaW1tYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRnVsbHlUcmltbWFibGVDb250ZW50
OyB9Ci0gICAgICAgIGJvb2wgaXNUcmFpbGluZ1J1blBhcnRpYWxseVRyaW1tYWJsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcGFydGlhbGx5VHJpbW1hYmxlV2lkdGg7IH0KLQotICAgICAgICB2b2lkIHJl
c2V0KCk7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBSdW5MaXN0JiBtX3J1bnM7Ci0gICAgICAg
IE9wdGlvbmFsPHNpemVfdD4gbV9maXJzdFJ1bkluZGV4OwotICAgICAgICBib29sIG1faGFzRnVs
bHlUcmltbWFibGVDb250ZW50IHsgZmFsc2UgfTsKLSAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBt
X2Z1bGx5VHJpbW1hYmxlV2lkdGggeyAwIH07Ci0gICAgICAgIElubGluZUxheW91dFVuaXQgbV9w
YXJ0aWFsbHlUcmltbWFibGVXaWR0aCB7IDAgfTsKLSAgICB9OwotCi0gICAgY29uc3QgSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7Ci0gICAgUnVuTGlz
dCBtX3J1bnM7Ci0gICAgVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50IG1fdHJpbW1hYmxlVHJhaWxp
bmdDb250ZW50OwotICAgIElubGluZUxheW91dFVuaXQgbV9saW5lTG9naWNhbExlZnQgeyAwIH07
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBtX2xpbmVMb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgSW5s
aW5lTGF5b3V0VW5pdCBtX2NvbnRlbnRMb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgYm9vbCBtX2hh
c0ludHJ1c2l2ZUZsb2F0IHsgZmFsc2UgfTsKLSAgICBib29sIG1faXNWaXN1YWxseUVtcHR5IHsg
dHJ1ZSB9OwotICAgIE9wdGlvbmFsPGJvb2w+IG1fbGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRy
aW1tYWJsZVRyYWlsaW5nQ29udGVudDsKLSAgICBib29sIG1fc2hvdWxkSWdub3JlVHJhaWxpbmdM
ZXR0ZXJTcGFjaW5nIHsgZmFsc2UgfTsKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV9p
c0Nsb3NlZCB7IGZhbHNlIH07Ci0jZW5kaWYKLX07Ci0KLWlubGluZSB2b2lkIExpbmVCdWlsZGVy
OjpUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ6OnJlc2V0KCkKLXsKLSAgICBtX2hhc0Z1bGx5VHJp
bW1hYmxlQ29udGVudCA9IGZhbHNlOwotICAgIG1fZmlyc3RSdW5JbmRleCA9IHsgfTsKLSAgICBt
X2Z1bGx5VHJpbW1hYmxlV2lkdGggPSB7IH07Ci0gICAgbV9wYXJ0aWFsbHlUcmltbWFibGVXaWR0
aCA9IHsgfTsKLX0KLQotaW5saW5lIExpbmVCdWlsZGVyOjpSdW46OlRyYWlsaW5nV2hpdGVzcGFj
ZSBMaW5lQnVpbGRlcjo6UnVuOjp0cmFpbGluZ1doaXRlc3BhY2VUeXBlKGNvbnN0IElubGluZVRl
eHRJdGVtJiBpbmxpbmVUZXh0SXRlbSkgY29uc3QKLXsKLSAgICBpZiAoIWlubGluZVRleHRJdGVt
LmlzV2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1cm4gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb25l
OwotICAgIGlmICghaW5saW5lVGV4dEl0ZW0uaXNDb2xsYXBzaWJsZSgpKQotICAgICAgICByZXR1
cm4gVHJhaWxpbmdXaGl0ZXNwYWNlOjpOb3RDb2xsYXBzaWJsZTsKLSAgICBpZiAoaW5saW5lVGV4
dEl0ZW0ubGVuZ3RoKCkgPT0gMSkKLSAgICAgICAgcmV0dXJuIFRyYWlsaW5nV2hpdGVzcGFjZTo6
Q29sbGFwc2libGU7Ci0gICAgcmV0dXJuIFRyYWlsaW5nV2hpdGVzcGFjZTo6Q29sbGFwc2VkOwot
fQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcAppbmRleCAxYWZmYTU2YjA2
NDJjNmQyMzNkYzE3NjU4MjlmMjMxMWQ3ODRiZjg0Li45MmIwYTUyZmNiZjdkNWRhMWUyODNiMWU4
NTIzMTYzZmRiNTlkMmU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCkBAIC0yODcsNyArMjg3
LDcgQEAgTGluZUxheW91dENvbnRleHQ6OkxpbmVMYXlvdXRDb250ZXh0KGNvbnN0IElubGluZUZv
cm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXQKIHsKIH0KIAotTGluZUxheW91dENvbnRleHQ6
OkxpbmVDb250ZW50IExpbmVMYXlvdXRDb250ZXh0OjpsYXlvdXRJbmxpbmVDb250ZW50KExpbmVC
dWlsZGVyJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCBPcHRpb25h
bDx1bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKQorTGluZUxheW91dENvbnRl
eHQ6OkxpbmVDb250ZW50IExpbmVMYXlvdXRDb250ZXh0OjpsYXlvdXRJbmxpbmVDb250ZW50KExp
bmUmIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIE9wdGlvbmFsPHVu
c2lnbmVkPiBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgpCiB7CiAgICAgQVNTRVJUKG1fZmxv
YXRzLmlzRW1wdHkoKSk7CiAgICAgbV9wYXJ0aWFsTGVhZGluZ1RleHRJdGVtID0geyB9OwpAQCAt
MzI2LDcgKzMyNiw3IEBAIExpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0
Q29udGV4dDo6bGF5b3V0SW5saW5lQ29udGVudChMaW5lQnVpbGRlCiAgICAgcmV0dXJuIGNsb3Nl
KGxpbmUsIGxheW91dFJhbmdlLCBjb21taXR0ZWRJbmxpbmVJdGVtQ291bnQsIHsgfSk7CiB9CiAK
LUxpbmVMYXlvdXRDb250ZXh0OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2Uo
Y29uc3QgTGluZUJ1aWxkZXImIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFu
Z2UsIHVuc2lnbmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNvbnRl
bnQ6OlBhcnRpYWxDb250ZW50PiBwYXJ0aWFsQ29udGVudCkKK0xpbmVMYXlvdXRDb250ZXh0OjpM
aW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UoY29uc3QgTGluZSYgbGluZSwgY29u
c3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgdW5zaWduZWQgY29tbWl0dGVkSW5saW5l
SXRlbUNvdW50LCBPcHRpb25hbDxMaW5lQ29udGVudDo6UGFydGlhbENvbnRlbnQ+IHBhcnRpYWxD
b250ZW50KQogewogICAgIEFTU0VSVF9VTlVTRUQobGluZSwgY29tbWl0dGVkSW5saW5lSXRlbUNv
dW50IHx8ICFtX2Zsb2F0cy5pc0VtcHR5KCkgfHwgbGluZS5oYXNJbnRydXNpdmVGbG9hdCgpKTsK
ICAgICBhdXRvIG51bWJlck9mQ29tbWl0dGVkSXRlbXMgPSBjb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQgKyBtX2Zsb2F0cy5zaXplKCk7CkBAIC0zODQsNyArMzg0LDcgQEAgdm9pZCBMaW5lTGF5b3V0
Q29udGV4dDo6bmV4dENvbnRlbnRGb3JMaW5lKExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUs
IHVuc2lnbmUKICAgICB9CiB9CiAKLXZvaWQgTGluZUxheW91dENvbnRleHQ6OmNvbW1pdEZsb2F0
cyhMaW5lQnVpbGRlciYgbGluZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSwg
Q29tbWl0SW50cnVzaXZlRmxvYXRzT25seSBjb21taXRJbnRydXNpdmVPbmx5KQordm9pZCBMaW5l
TGF5b3V0Q29udGV4dDo6Y29tbWl0RmxvYXRzKExpbmUmIGxpbmUsIGNvbnN0IExpbmVDYW5kaWRh
dGUmIGxpbmVDYW5kaWRhdGUsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHkgY29tbWl0SW50cnVz
aXZlT25seSkKIHsKICAgICBhdXRvJiBmbG9hdENvbnRlbnQgPSBsaW5lQ2FuZGlkYXRlLmZsb2F0
Q29udGVudDsKICAgICBhdXRvIGxlZnRJbnRydXNpdmVGbG9hdHNXaWR0aCA9IElubGluZUxheW91
dFVuaXQgeyB9OwpAQCAtNDE0LDcgKzQxNCw3IEBAIHZvaWQgTGluZUxheW91dENvbnRleHQ6OmNv
bW1pdEZsb2F0cyhMaW5lQnVpbGRlciYgbGluZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYgbGluCiAg
ICAgfQogfQogCi1MaW5lTGF5b3V0Q29udGV4dDo6UmVzdWx0IExpbmVMYXlvdXRDb250ZXh0Ojpo
YW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExpbmVCcmVha2VyJiBsaW5lQnJlYWtlciwgTGlu
ZUJ1aWxkZXImIGxpbmUsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIGNvbnN0
IExpbmVDYW5kaWRhdGUmIGxpbmVDYW5kaWRhdGUpCitMaW5lTGF5b3V0Q29udGV4dDo6UmVzdWx0
IExpbmVMYXlvdXRDb250ZXh0OjpoYW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExpbmVCcmVh
a2VyJiBsaW5lQnJlYWtlciwgTGluZSYgbGluZSwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlv
dXRSYW5nZSwgY29uc3QgTGluZUNhbmRpZGF0ZSYgbGluZUNhbmRpZGF0ZSkKIHsKICAgICBhdXRv
JiBpbmxpbmVDb250ZW50ID0gbGluZUNhbmRpZGF0ZS5pbmxpbmVDb250ZW50OwogICAgIGF1dG8m
IGNhbmRpZGF0ZVJ1bnMgPSBpbmxpbmVDb250ZW50LnJ1bnMoKTsKQEAgLTQ4MCw3ICs0ODAsNyBA
QCBMaW5lTGF5b3V0Q29udGV4dDo6UmVzdWx0IExpbmVMYXlvdXRDb250ZXh0OjpoYW5kbGVGbG9h
dHNBbmRJbmxpbmVDb250ZW50KExpbmVCcgogICAgIHJldHVybiB7IExpbmVCcmVha2VyOjpJc0Vu
ZE9mTGluZTo6Tm8gfTsKIH0KIAotdm9pZCBMaW5lTGF5b3V0Q29udGV4dDo6Y29tbWl0UGFydGlh
bENvbnRlbnQoTGluZUJ1aWxkZXImIGxpbmUsIGNvbnN0IExpbmVCcmVha2VyOjpSdW5MaXN0JiBy
dW5zLCBjb25zdCBMaW5lQnJlYWtlcjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50JiBw
YXJ0aWFsVHJhaWxpbmdDb250ZW50KQordm9pZCBMaW5lTGF5b3V0Q29udGV4dDo6Y29tbWl0UGFy
dGlhbENvbnRlbnQoTGluZSYgbGluZSwgY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmIHJ1bnMs
IGNvbnN0IExpbmVCcmVha2VyOjpSZXN1bHQ6OlBhcnRpYWxUcmFpbGluZ0NvbnRlbnQmIHBhcnRp
YWxUcmFpbGluZ0NvbnRlbnQpCiB7CiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IHJ1bnMuc2l6ZSgpOyArK2luZGV4KSB7CiAgICAgICAgIGF1dG8mIHJ1biA9IHJ1bnNbaW5kZXhd
OwpAQCAtNTAxLDcgKzUwMSw3IEBAIHZvaWQgTGluZUxheW91dENvbnRleHQ6OmNvbW1pdFBhcnRp
YWxDb250ZW50KExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdCBMaW5lQnJlYWtlCiAgICAgfQogfQog
Ci1zaXplX3QgTGluZUxheW91dENvbnRleHQ6OnJlYnVpbGRMaW5lKExpbmVCdWlsZGVyJiBsaW5l
LCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlKQorc2l6ZV90IExpbmVMYXlvdXRD
b250ZXh0OjpyZWJ1aWxkTGluZShMaW5lJiBsaW5lLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxh
eW91dFJhbmdlKQogewogICAgIC8vIENsZWFyIHRoZSBsaW5lIGFuZCBzdGFydCBhcHBlbmRpbmcg
dGhlIGlubGluZSBpdGVtcyBjbG9zaW5nIHdpdGggdGhlIGxhc3Qgd3JhcCBvcHBvcnR1bml0eSBy
dW4uCiAgICAgbGluZS5jbGVhckNvbnRlbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCmluZGV4IDYw
M2YzNDZkYzEwYTkyNzEwNDBiMGM0ZTJkNzA4ZmIyNjk3NTk5MzkuLjA2MjFmNmI4MzY3ZmY3Y2Qx
MzNiNDZiMjBlMzU5MTg0Y2Y5N2JhYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaApAQCAtMjcsOCAr
MjcsOCBAQAogCiAjaWYgRU5BQkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCiAKKyNpbmNs
dWRlICJJbmxpbmVMaW5lLmgiCiAjaW5jbHVkZSAiSW5saW5lTGluZUJyZWFrZXIuaCIKLSNpbmNs
dWRlICJJbmxpbmVMaW5lQnVpbGRlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3Bh
Y2UgTGF5b3V0IHsKQEAgLTU4LDkgKzU4LDkgQEAgcHVibGljOgogICAgICAgICB9OwogICAgICAg
ICB1c2luZyBGbG9hdExpc3QgPSBWZWN0b3I8RmxvYXQ+OwogICAgICAgICBGbG9hdExpc3QgZmxv
YXRzOwotICAgICAgICBjb25zdCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVuczsKKyAgICAgICAg
Y29uc3QgTGluZTo6UnVuTGlzdCYgcnVuczsKICAgICB9OwotICAgIExpbmVDb250ZW50IGxheW91
dElubGluZUNvbnRlbnQoTGluZUJ1aWxkZXImLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmLCBPcHRp
b25hbDx1bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICBMaW5lQ29u
dGVudCBsYXlvdXRJbmxpbmVDb250ZW50KExpbmUmLCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmLCBP
cHRpb25hbDx1bnNpZ25lZD4gcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKIAogcHJpdmF0
ZToKICAgICB2b2lkIG5leHRDb250ZW50Rm9yTGluZShMaW5lQ2FuZGlkYXRlJiwgdW5zaWduZWQg
aW5saW5lSXRlbUluZGV4LCBjb25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCBPcHRp
b25hbDx1bnNpZ25lZD4gb3ZlcmZsb3dMZW5ndGgsIElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
TGluZVdpZHRoLCBJbmxpbmVMYXlvdXRVbml0IGN1cnJlbnRMb2dpY2FsUmlnaHQpOwpAQCAtNzQs
MTEgKzc0LDExIEBAIHByaXZhdGU6CiAgICAgICAgIE9wdGlvbmFsIDxMaW5lQ29udGVudDo6UGFy
dGlhbENvbnRlbnQ+IHBhcnRpYWxDb250ZW50IHsgfTsKICAgICB9OwogICAgIGVudW0gY2xhc3Mg
Q29tbWl0SW50cnVzaXZlRmxvYXRzT25seSB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGNvbW1pdEZs
b2F0cyhMaW5lQnVpbGRlciYsIGNvbnN0IExpbmVDYW5kaWRhdGUmLCBDb21taXRJbnRydXNpdmVG
bG9hdHNPbmx5ID0gQ29tbWl0SW50cnVzaXZlRmxvYXRzT25seTo6Tm8pOwotICAgIFJlc3VsdCBo
YW5kbGVGbG9hdHNBbmRJbmxpbmVDb250ZW50KExpbmVCcmVha2VyJiwgTGluZUJ1aWxkZXImLCBj
b25zdCBJbmxpbmVJdGVtUmFuZ2UmIGxheW91dFJhbmdlLCBjb25zdCBMaW5lQ2FuZGlkYXRlJik7
Ci0gICAgc2l6ZV90IHJlYnVpbGRMaW5lKExpbmVCdWlsZGVyJiwgY29uc3QgSW5saW5lSXRlbVJh
bmdlJiBsYXlvdXRSYW5nZSk7Ci0gICAgdm9pZCBjb21taXRQYXJ0aWFsQ29udGVudChMaW5lQnVp
bGRlciYsIGNvbnN0IExpbmVCcmVha2VyOjpSdW5MaXN0JiwgY29uc3QgTGluZUJyZWFrZXI6OlJl
c3VsdDo6UGFydGlhbFRyYWlsaW5nQ29udGVudCYpOwotICAgIExpbmVDb250ZW50IGNsb3NlKGNv
bnN0IExpbmVCdWlsZGVyJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgdW5z
aWduZWQgY29tbWl0dGVkSW5saW5lSXRlbUNvdW50LCBPcHRpb25hbDxMaW5lQ29udGVudDo6UGFy
dGlhbENvbnRlbnQ+KTsKKyAgICB2b2lkIGNvbW1pdEZsb2F0cyhMaW5lJiwgY29uc3QgTGluZUNh
bmRpZGF0ZSYsIENvbW1pdEludHJ1c2l2ZUZsb2F0c09ubHkgPSBDb21taXRJbnRydXNpdmVGbG9h
dHNPbmx5OjpObyk7CisgICAgUmVzdWx0IGhhbmRsZUZsb2F0c0FuZElubGluZUNvbnRlbnQoTGlu
ZUJyZWFrZXImLCBMaW5lJiwgY29uc3QgSW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSwgY29u
c3QgTGluZUNhbmRpZGF0ZSYpOworICAgIHNpemVfdCByZWJ1aWxkTGluZShMaW5lJiwgY29uc3Qg
SW5saW5lSXRlbVJhbmdlJiBsYXlvdXRSYW5nZSk7CisgICAgdm9pZCBjb21taXRQYXJ0aWFsQ29u
dGVudChMaW5lJiwgY29uc3QgTGluZUJyZWFrZXI6OlJ1bkxpc3QmLCBjb25zdCBMaW5lQnJlYWtl
cjo6UmVzdWx0OjpQYXJ0aWFsVHJhaWxpbmdDb250ZW50Jik7CisgICAgTGluZUNvbnRlbnQgY2xv
c2UoY29uc3QgTGluZSYsIGNvbnN0IElubGluZUl0ZW1SYW5nZSYgbGF5b3V0UmFuZ2UsIHVuc2ln
bmVkIGNvbW1pdHRlZElubGluZUl0ZW1Db3VudCwgT3B0aW9uYWw8TGluZUNvbnRlbnQ6OlBhcnRp
YWxDb250ZW50Pik7CiAKICAgICBJbmxpbmVMYXlvdXRVbml0IGlubGluZUl0ZW1XaWR0aChjb25z
dCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBjb250ZW50TG9naWNhbExlZnQpIGNvbnN0
OwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>