<?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>215016</bug_id>
          
          <creation_ts>2020-07-31 05:15:11 -0700</creation_ts>
          <short_desc>[LFC][IFC] LineBuilder should not align the runs</short_desc>
          <delta_ts>2020-08-26 21:36:43 -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>
          
          <blocked>215087</blocked>
    
    <blocked>215752</blocked>
          <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>1676792</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-07-31 05:15:11 -0700</bug_when>
    <thetext>LineBuilder is responsible for adding content to the line but the alignment (horizontal/vertical) should be done by the LineBox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676793</commentid>
    <comment_count>1</comment_count>
      <attachid>405681</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-07-31 05:19:09 -0700</bug_when>
    <thetext>Created attachment 405681
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678557</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-07 05:16:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/66675537&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683017</commentid>
    <comment_count>3</comment_count>
      <attachid>407309</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-26 10:16:04 -0700</bug_when>
    <thetext>Created attachment 407309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683069</commentid>
    <comment_count>4</comment_count>
      <attachid>407319</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-26 12:16:18 -0700</bug_when>
    <thetext>Created attachment 407319
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683261</commentid>
    <comment_count>5</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-26 19:23:46 -0700</bug_when>
    <thetext>ChangeLog entry in Source/WebCore/ChangeLog is not at the top of the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683262</commentid>
    <comment_count>6</comment_count>
      <attachid>407369</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-08-26 19:26:24 -0700</bug_when>
    <thetext>Created attachment 407369
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1683279</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-26 21:36:42 -0700</bug_when>
    <thetext>Committed r266222: &lt;https://trac.webkit.org/changeset/266222&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 407369.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405681</attachid>
            <date>2020-07-31 05:19:09 -0700</date>
            <delta_ts>2020-08-26 10:16:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215016-20200731051908.patch</filename>
            <type>text/plain</type>
            <size>49521</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYyNDE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2VjMWRhYzZjNWUyZjNk
N2VhMTM1ZGZhMDAyNmU1Yjg0NmQ0Y2RjZS4uY2QyZjA1OTk1YTA5MTRjYWMyMDRlNjRhZmYzYzhj
YTExYmJjYzQ5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA3LTMxICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlciBzaG91bGQgbm90IGFsaWduIHRoZSBydW5zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBtb3Zpbmcg
YWxpZ25tZW50IGxvZ2ljIG92ZXIgdG8gdGhlIExpbmVCb3guCisgICAgICAgIExpbmVCdWlsZGVy
IGlzIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgY29udGVudCB0byB0aGUgbGluZSwgYnV0IHRoZSBm
aW5hbCBhbGlnbm1lbnQgd2lsbCBiZSBkb25lIGJ5IHRoZSBMaW5lQm94LgorICAgICAgICBUaGlz
IHdvcmtzIHdlbGwgd2l0aCBwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24sIHdoZXJlIHdlIHVz
ZSB0aGUgTGluZUJ1aWxkZXIgdG8gY29tcHV0ZSBsaW5lIHdpZHRoIGJ1dCB3ZQorICAgICAgICBk
b24ndCByZWFsbHkgbmVlZCB0byBjb25zdHJ1Y3QgYSBMaW5lQm94IChhbmQgbm8gYWxpZ25tZW50
IGlzIG5lZWRlZCkuICAKKworICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2lu
Z0NvbnRlbnQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2lu
Z0NvbnRlbnQ6OmlzQ29uZGl0aW9uYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpIYW5naW5nQ29udGVudDo6c2V0SXNDb25kaXRpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkhhbmdpbmdDb250ZW50OjpleHBhbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpIYW5naW5nQ29udGVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Q29udGVudEFsaWduZXI6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGln
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGln
bkhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxp
Z25lcjo6YWxpZ25WZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNv
bnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVDb250ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpjb2xsZWN0SGFuZ2luZ0NvbnRl
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6
OnJ1bkNvbnRlbnRIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29u
c3RyYWludCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
TGluZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxp
bmdUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OmlzVmlzdWFsbHlOb25FbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkhhbmdpbmdDb250ZW50Ojp3aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50Ojppc0NvbmRpdGlvbmFsIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6OnNldElzQ29uZGl0aW9u
YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpIYW5naW5nQ29udGVudDo6
ZXhwYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50OjpyZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6
OmxheW91dFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVy
OjphbGlnblZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWdu
ZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1
aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxpbmVCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cnVucyk6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UpOgorICAgICAgICAq
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0Lmg6CisKIDIwMjAtMDct
MzEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNd
IE1vdmUgaW5saW5lIHJ1biBhbGlnbm1lbnQgbG9naWMgdG8gYSBkZWRpY2F0ZWQgY2xhc3MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCAzM2NmNGI3NzEwOTgyYzU5Njhl
NWM3YzU1ODA5OWExYTk0NmQ4Nzg5Li44YmQ0ZWZhODkxYjE5MzM1NWRhYzEyOGQ3Y2ZjNTc3NzVj
MjYyN2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC03Niw2ICs3
NiwzNDEgQEAgc3RhdGljIGlubGluZSBjb25zdCBCb3gqIG5leHRJbmxpbmVMZXZlbEJveFRvTGF5
b3V0KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQog
CitzdHJ1Y3QgSGFuZ2luZ0NvbnRlbnQgeworcHVibGljOgorICAgIHZvaWQgcmVzZXQoKTsKKwor
ICAgIElubGluZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9Cisg
ICAgYm9vbCBpc0NvbmRpdGlvbmFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbmRpdGlvbmFsOyB9
CisKKyAgICB2b2lkIHNldElzQ29uZGl0aW9uYWwoKSB7IG1faXNDb25kaXRpb25hbCA9IHRydWU7
IH0KKyAgICB2b2lkIGV4cGFuZChJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggKz0g
d2lkdGg7IH0KKworcHJpdmF0ZToKKyAgICBib29sIG1faXNDb25kaXRpb25hbCB7IGZhbHNlIH07
CisgICAgSW5saW5lTGF5b3V0VW5pdCBtX3dpZHRoIHsgMCB9OworfTsKKwordm9pZCBIYW5naW5n
Q29udGVudDo6cmVzZXQoKQoreworICAgIG1faXNDb25kaXRpb25hbCA9IGZhbHNlOworICAgIG1f
d2lkdGggPSAgMDsKK30KKworY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyIHsKK3B1YmxpYzoKKyAg
ICBMaW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBMaW5l
Qm94JiwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdp
ZHRoKTsKKworICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IHsgTm8s
IFllcyB9OworICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWduTW9kZSwgSXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICB2b2lkIGFsaWduVmVydGljYWxseSgpOworICAg
IHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKKyAgICBIYW5n
aW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50KSBjb25zdDsKKyAgICBJbmxpbmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3Qg
TGluZUJ1aWxkZXI6OlJ1biYpIGNvbnN0OworCisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0
aW5nQ29udGV4dDsgfQorICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0
dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQorCisgICAgY29uc3QgSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgTGlu
ZUJveCYgbV9saW5lQm94OworICAgIExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7CisgICAg
SW5saW5lTGF5b3V0VW5pdCBtX2F2YWlsYWJsZVdpZHRoOworfTsKKworTGluZUNvbnRlbnRBbGln
bmVyOjpMaW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlu
bGluZUZvcm1hdHRpbmdDb250ZXh0LCBMaW5lQm94JiBsaW5lQm94LCBMaW5lQnVpbGRlcjo6UnVu
TGlzdCYgcnVucywgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKKyAgICA6IG1faW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgLCBtX2xp
bmVCb3gobGluZUJveCkKKyAgICAsIG1fcnVucyhydW5zKQorICAgICwgbV9hdmFpbGFibGVXaWR0
aChhdmFpbGFibGVXaWR0aCkKK3sKK30KKwordm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWdu
SG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgSXNMYXN0TGlu
ZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmUpCit7CisgICAgYXV0byBoYW5naW5nQ29udGVu
dCA9IGNvbGxlY3RIYW5naW5nQ29udGVudChpc0xhc3RMaW5lKTsKKyAgICBhdXRvIGF2YWlsYWJs
ZVdpZHRoID0gbV9hdmFpbGFibGVXaWR0aCArIGhhbmdpbmdDb250ZW50LndpZHRoKCk7CisgICAg
aWYgKG1fcnVucy5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVz
dGlmeSkgeworICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBhdXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQgPSBbJl0gKGF1
dG8gYXZhaWxhYmxlV2lkdGgpIC0+IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKKyAgICAg
ICAgc3dpdGNoIChob3Jpem9udGFsQWxpZ25tZW50KSB7CisgICAgICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAg
ICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlN0YXJ0OgorICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpXZWJLaXRSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6Cisg
ICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lk
dGgsIDApOworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKKyAgICAgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAgICAgICByZXR1cm4gc3RkOjpt
YXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGggLyAyLCAwKTsKKyAgICAgICAgY2Fz
ZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9OworCisgICAgYXV0byBhZGp1c3Rt
ZW50ID0gYWRqdXN0bWVudEZvckFsaWdubWVudChhdmFpbGFibGVXaWR0aCk7CisgICAgaWYgKCFh
ZGp1c3RtZW50KQorICAgICAgICByZXR1cm47CisgICAgLy8gSG9yaXpvbnRhbCBhbGlnbm1lbnQg
bWVhbnMgdGhhdCB3ZSBub3Qgb25seSBhZGp1c3QgdGhlIHJ1bnMgYnV0IGFsc28gbWFrZSBzdXJl
CisgICAgLy8gdGhhdCB0aGUgbGluZSBib3ggaXMgYWxpZ25lZCBhcyB3ZWxsCisgICAgLy8gZS5n
LiA8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHdpZHRoOiAxMDBweDsiPmNlbnRlcmVk
IHRleHQ8L2Rpdj4gOiB0aGUgbGluZSBib3ggd2lsbCBhbHNvIGJlIGNlbnRlcmVkCisgICAgLy8g
YXMgb3Bwb3NlZCB0byBzdGFydCBhdCAwcHggYWxsIHRoZSB3YXkgdG8gW2NlbnRlcmVkIHRleHRd
IHJ1bidzIHJpZ2h0IGVkZ2UuCisgICAgbV9saW5lQm94Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVz
dG1lbnQpOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKQorICAgICAgICBydW4ubW92ZUhv
cml6b250YWxseSgqYWRqdXN0bWVudCk7Cit9CisKK3ZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjph
bGlnblZlcnRpY2FsbHkoKQoreworICAgIGF1dG8gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCA9IG1f
bGluZUJveC5sb2dpY2FsUmVjdCgpOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Cisg
ICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBh
dXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgIGF1dG8gdmVydGljYWxB
bGlnbiA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKKyAgICAgICAgYXV0byBh
c2NlbnQgPSBsYXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpOworCisgICAg
ICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgeworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OkJhc2VsaW5lOgorICAgICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpIHx8IHJ1bi5pc1Rl
eHQoKSkKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJh
c2VsaW5lKCkgLSBhc2NlbnQ7CisgICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWluZXJT
dGFydCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAgICAgbG9n
aWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50IC0gYm94R2Vv
bWV0cnkuYm9yZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAmJiBs
YXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hl
ZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkp
OworICAgICAgICAgICAgICAgIC8vIFNwZWMgbWFrZXMgdXMgZ2VuZXJhdGUgYXQgbGVhc3Qgb25l
IGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVC
bG9ja0Jhc2VsaW5lID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxp
bmVCb3hlcy5sYXN0KCkuYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgaW5saW5l
LWJsb2NrJ3MgYmFzZWxpbmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGl0cyBjb250ZW50IGJveC4g
TGV0J3MgY29udmVydCBpdCByZWxhdGl2ZSB0byB0aGUgbWFyZ2luIGJveC4KKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICAgX19fX19fX19fX19fX19fIDwtIG1hcmdpbiBib3gKKyAgICAgICAg
ICAgICAgICAvLyAgICAgICAgICB8CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCAgX19f
X19fX19fX19fICA8LSBib3JkZXIgYm94CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8
CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8ICBfX19fX19fX18gIDwtIGNvbnRlbnQg
Ym94CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICBeCisgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgfCB8IHwgICB8ICA8LSBiYXNlbGluZSBvZmZzZXQKKyAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICB8IHwgfCAgIHwKKyAgICAgICAgICAgICAgICAvLyAgICAgdGV4dCB8
IHwgfCAgIHYgdGV4dAorICAgICAgICAgICAgICAgIC8vICAgICAtLS0tLXwtfC18LS0tLS0tLS0t
LSA8LSBiYXNlbGluZQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJv
eCk7CisgICAgICAgICAgICAgICAgYXV0byBiYXNlbGluZUZyb21NYXJnaW5Cb3ggPSBib3hHZW9t
ZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0
cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOworICAgICAg
ICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIGJh
c2VsaW5lRnJvbU1hcmdpbkJveDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94
KGxheW91dEJveCk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGln
bm1lbnRCYXNlbGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hHZW9t
ZXRyeS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVuLmxvZ2ljYWxSZWN0KCku
aGVpZ2h0KCkgKyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKKyAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSAwX2x1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGlu
ZUJveC5sb2dpY2FsQm90dG9tKCkgLSBydW4ubG9naWNhbFJlY3QoKS5oZWlnaHQoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9J
TVBMRU1FTlRFRF9ZRVQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IHJ1bi5hZGp1c3RMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOworICAgICAgICAvLyBBZGp1c3Qgc2Ny
b2xsYWJsZSBvdmVyZmxvdyBpZiB0aGUgcnVuIG92ZXJmbG93cyB0aGUgbGluZS4KKyAgICAgICAg
c2Nyb2xsYWJsZU92ZXJmbG93UmVjdC5leHBhbmRWZXJ0aWNhbGx5VG9Db250YWluKHJ1bi5sb2dp
Y2FsUmVjdCgpKTsKKyAgICAgICAgLy8gQ29udmVydCBydW5zIGZyb20gcmVsYXRpdmUgdG8gdGhl
IGxpbmUgdG9wL2xlZnQgdG8gdGhlIGZvcm1hdHRpbmcgcm9vdCdzIGJvcmRlciBib3ggdG9wL2xl
ZnQuCisgICAgICAgIHJ1bi5tb3ZlVmVydGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgpKTsK
KyAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkobV9saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwor
ICAgIH0KKyAgICBtX2xpbmVCb3guc2V0U2Nyb2xsYWJsZU92ZXJmbG93KHNjcm9sbGFibGVPdmVy
Zmxvd1JlY3QpOworfQorCit2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6anVzdGlmeVJ1bnMoSW5s
aW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKK3sKKyAgICBBU1NFUlQoYXZhaWxhYmxlV2lk
dGggPiAwKTsKKyAgICAvLyBDb2xsZWN0IHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdHkgbnVtYmVy
cyBhbmQgZmluZCB0aGUgbGFzdCBydW4gd2l0aCBjb250ZW50LgorICAgIGF1dG8gZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCA9IDA7CisgICAgTGluZUJ1aWxkZXI6OlJ1biogbGFzdFJ1bldpdGhD
b250ZW50ID0gbnVsbHB0cjsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAg
ICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ICs9IHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KCk7CisgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzQm94KCkpCisgICAgICAg
ICAgICBsYXN0UnVuV2l0aENvbnRlbnQgPSAmcnVuOworICAgIH0KKyAgICAvLyBOZWVkIHRvIGZp
eCB1cCB0aGUgbGFzdCBydW4ncyB0cmFpbGluZyBleHBhbnNpb24uCisgICAgaWYgKGxhc3RSdW5X
aXRoQ29udGVudCAmJiBsYXN0UnVuV2l0aENvbnRlbnQtPmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5
KCkpIHsKKyAgICAgICAgLy8gVHVybiBvZmYgdGhlIHRyYWlsaW5nIGJpdHMgZmlyc3QgYW5kIGFk
ZCB0aGUgZm9yYmlkIHRyYWlsaW5nIGV4cGFuc2lvbi4KKyAgICAgICAgYXV0byBsZWFkaW5nRXhw
YW5zaW9uID0gbGFzdFJ1bldpdGhDb250ZW50LT5leHBhbnNpb25CZWhhdmlvcigpICYgTGVhZGlu
Z0V4cGFuc2lvbk1hc2s7CisgICAgICAgIGxhc3RSdW5XaXRoQ29udGVudC0+c2V0RXhwYW5zaW9u
QmVoYXZpb3IobGVhZGluZ0V4cGFuc2lvbiB8IEZvcmJpZFRyYWlsaW5nRXhwYW5zaW9uKTsKKyAg
ICB9CisgICAgLy8gTm90aGluZyB0byBkaXN0cmlidXRlPworICAgIGlmICghZXhwYW5zaW9uT3Bw
b3J0dW5pdHlDb3VudCkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4
dHJhIHNwYWNlLgorICAgIGF1dG8gZXhwYW5zaW9uVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lk
dGggLyBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50OworICAgIElubGluZUxheW91dFVuaXQgYWNj
dW11bGF0ZWRFeHBhbnNpb24gPSAwOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Cisg
ICAgICAgIC8vIEV4cGFuZCBhbmQgbW92ZXMgcnVucyBieSB0aGUgYWNjdW11bGF0ZWQgZXhwYW5z
aW9uLgorICAgICAgICBpZiAoIXJ1bi5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7CisgICAg
ICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7CisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQocnVuLmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQoKSk7CisgICAgICAgIGF1dG8gY29tcHV0ZWRFeHBhbnNpb24gPSBl
eHBhbnNpb25Ub0Rpc3RyaWJ1dGUgKiBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOwor
ICAgICAgICBydW4uc2V0Q29tcHV0ZWRIb3Jpem9udGFsRXhwYW5zaW9uKGNvbXB1dGVkRXhwYW5z
aW9uKTsKKyAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24p
OworICAgICAgICBhY2N1bXVsYXRlZEV4cGFuc2lvbiArPSBjb21wdXRlZEV4cGFuc2lvbjsKKyAg
ICB9Cit9CisKK3ZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVI
ZWlnaHQoKQoreworICAgIHVuc2lnbmVkIGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7
CisgICAgYXV0byBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gZmFsc2U7CisgICAgZm9y
IChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxh
eW91dEJveCgpOworICAgICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworCisg
ICAgICAgIHJ1bi5zZXRMb2dpY2FsSGVpZ2h0KHJ1bkNvbnRlbnRIZWlnaHQocnVuKSk7CisKKyAg
ICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICAg
ICAgLy8gRm9yIHRleHQgY29udGVudCB3ZSBzZXQgdGhlIGJhc2VsaW5lIGVpdGhlciB0aHJvdWdo
IHRoZSBpbml0aWFsIHN0cnV0IChzZXQgYnkgdGhlIGZvcm1hdHRpbmcgY29udGV4dCByb290KSBv
cgorICAgICAgICAgICAgLy8gdGhyb3VnaCB0aGUgaW5saW5lIGNvbnRhaW5lciAoc3RhcnQpLiBO
b3JtYWxseSB0aGUgdGV4dCBjb250ZW50IGl0c2VsZiBkb2VzIG5vdCBzdHJldGNoIHRoZSBsaW5l
LgorICAgICAgICAgICAgaWYgKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCkgeworICAgICAg
ICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYWRqdXN0ZWQgdGhlIGxpbmUgaGVpZ2h0L2Jhc2Vs
aW5lIHRocm91Z2ggdGhlIHBhcmVudCBpbmxpbmUgY29udGFpbmVyLiAKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChoYXNTZWVuRGlyZWN0
VGV4dE9yTGluZUJyZWFrKSB7CisgICAgICAgICAgICAgICAgLy8gZS5nIGRpdj5maXJzdCB0ZXh0
PC9kaXY+IG9yIDxkaXY+PHNwYW4+bmVzdGVkPHNwYW4+Zmlyc3QgZGlyZWN0IHRleHQ8L2Rpdj4u
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBo
YXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gdHJ1ZTsKKyAgICAgICAgICAgIC8vIFdlIGFy
ZSBpbiBxdWlya3MgbW9kZSB3aGVyZSB0aGUgZm9udC1tZXRyaWNzIG1pZ2h0IGNoYW5nZSB0aGUg
bGluZSBsaW5lIGhlaWdodC9iYXNlbGluZSBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGV4dCBjb250
ZW50IG9uIHRoZSBsaW5lCisgICAgICAgICAgICAvLyBvdXRzaWRlIG9mIGFuIGlubGluZSBjb250
YWluZXIuCisgICAgICAgICAgICBhdXRvIGhhbGZMZWFkaW5nID0gTGluZUJ1aWxkZXI6OmhhbGZM
ZWFkaW5nTWV0cmljcyhzdHlsZS5mb250TWV0cmljcygpLCBzdHlsZS5jb21wdXRlZExpbmVIZWln
aHQoKSk7CisgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFk
aW5nLmFzY2VudCk7CisgICAgICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlciho
YWxmTGVhZGluZy5kZXNjZW50KTsKKyAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVp
Z2h0SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAg
ICAgICAgICAgICsraW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsOworICAgICAgICAgICAgLy8g
SW5saW5lIGNvbnRhaW5lcnMgc3RyZXRjaCB0aGUgbGluZSBieSB0aGVpciBmb250IHNpemUuCisg
ICAgICAgICAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zLCBwYWRkaW5ncyBhbmQgYm9yZGVycyBkb24n
dCBjb250cmlidXRlIHRvIHRoZSBsaW5lIGhlaWdodC4KKyAgICAgICAgICAgIGF1dG8mIGZvbnRN
ZXRyaWNzID0gc3R5bGUuZm9udE1ldHJpY3MoKTsKKyAgICAgICAgICAgIGlmIChzdHlsZS52ZXJ0
aWNhbEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFzZWxpbmUpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGhhbGZMZWFkaW5nID0gTGluZUJ1aWxkZXI6OmhhbGZMZWFkaW5nTWV0cmljcyhmb250
TWV0cmljcywgc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIC8v
IEJvdGggaGFsZmxlYWRpbmcgYXNjZW50IGFuZCBkZXNjZW50IGNvdWxkIGJlIG5lZ2F0aXZlICh0
YWxsIGZvbnQgdnMuIHNtYWxsIGxpbmUtaGVpZ2h0IHZhbHVlKQorICAgICAgICAgICAgICAgIGlm
IChoYWxmTGVhZGluZy5kZXNjZW50ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94
LnNldERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuZGVzY2VudCk7CisgICAgICAgICAgICAg
ICAgaWYgKGhhbGZMZWFkaW5nLmFzY2VudCA+IDApCisgICAgICAgICAgICAgICAgICAgIG1fbGlu
ZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuYXNjZW50KTsKKyAgICAgICAgICAg
ICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtX2xpbmVCb3guYXNjZW50
QW5kRGVzY2VudCgpLmhlaWdodCgpKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKGZvbnRNZXRyaWNzLmhlaWdo
dCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ1
bi5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgbGluZSdzIGJhc2VsaW5l
IGFuZCBoZWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRqdXN0ZWQgYXQgQ29udGFpbmVyU3RhcnQu
CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKTsKKyAgICAg
ICAgICAgIC0taW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVuLmlzQm94KCkpIHsKKyAgICAgICAgICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChs
YXlvdXRCb3gpOworICAgICAgICAgICAgYXV0byBtYXJnaW5Cb3hIZWlnaHQgPSBib3hHZW9tZXRy
eS5tYXJnaW5Cb3hIZWlnaHQoKTsKKworICAgICAgICAgICAgc3dpdGNoIChzdHlsZS52ZXJ0aWNh
bEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6IHsK
KyAgICAgICAgICAgICAgICBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAmJiBsYXlv
dXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIElubGluZS1ibG9ja3Mgd2l0aCBpbmxpbmUgY29udGVudCBhbHdheXMgaGF2
ZSBiYXNlbGluZXMuCisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9
IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8
Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUg
aGFzIHRvIGJlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgorICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5
SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpOworICAgICAgICAgICAgICAgICAgICBh
dXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgYm94R2VvbWV0
cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVy
KGJlZm9yZUhlaWdodCArIGxhc3RMaW5lQm94LmJhc2VsaW5lKCkpOworICAgICAgICAgICAgICAg
ICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vbiBp
bmxpbmUtYmxvY2sgYm94ZXMgc2l0IG9uIHRoZSBiYXNlbGluZSAoaW5jbHVkaW5nIHRoZWlyIGJv
dHRvbSBtYXJnaW4pLgorICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZH
cmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAgICAgICAgICAgICAgIC8vIElnbm9yZSBu
ZWdhdGl2ZSBkZXNjZW50ICh5ZXMsIG5lZ2F0aXZlIGRlc2NlbnQgaXMgYSB0aGluZykuCisgICAg
ICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdp
bkJveEhlaWdodCArIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KDAsIG1fbGluZUJveC5hc2Nl
bnRBbmREZXNjZW50KCkuZGVzY2VudCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6VG9wOgorICAgICAgICAgICAgICAgIC8vIFRvcCBhbGlnbiBjb250ZW50IG5ldmVyIGNoYW5n
ZXMgdGhlIGJhc2VsaW5lLCBpdCBvbmx5IHB1c2hlcyB0aGUgYm90dG9tIG9mIHRoZSBsaW5lIGZ1
cnRoZXIgZG93bi4KKyAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElm
R3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206IHsKKyAgICAgICAgICAgICAgICAvLyBC
b3R0b20gYWxpZ25lZCwgdGFsbCBjb250ZW50IHB1c2hlcyB0aGUgYmFzZWxpbmUgZnVydGhlciBk
b3duIGZyb20gdGhlIGxpbmUgdG9wLgorICAgICAgICAgICAgICAgIGF1dG8gbGluZUxvZ2ljYWxI
ZWlnaHQgPSBtX2xpbmVCb3gubG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgICAgIGlmICht
YXJnaW5Cb3hIZWlnaHQgPiBsaW5lTG9naWNhbEhlaWdodCkgeworICAgICAgICAgICAgICAgICAg
ICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOwor
ICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0
ZXIobV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgKyAobWFyZ2luQm94SGVpZ2h0IC0gbGlu
ZUxvZ2ljYWxIZWlnaHQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KK30K
KworSGFuZ2luZ0NvbnRlbnQgTGluZUNvbnRlbnRBbGlnbmVyOjpjb2xsZWN0SGFuZ2luZ0NvbnRl
bnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCkgY29uc3QKK3sKKyAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9
OworICAgIGlmIChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPT0gSXNMYXN0TGluZVdpdGhJ
bmxpbmVDb250ZW50OjpZZXMpCisgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9u
YWwoKTsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UobV9ydW5z
KSkgeworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWlu
ZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAocnVuLmlzTGluZUJy
ZWFrKCkpIHsKKyAgICAgICAgICAgIGhhbmdpbmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmICghcnVuLmhhc1Ry
YWlsaW5nV2hpdGVzcGFjZSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIENoZWNr
IGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNwYWNlLgorICAgICAgICBpZiAo
cnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6OlByZVdyYXApCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIgYSBub3JtYWwgb3IgY29uZGl0
aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCisgICAgICAgIGhhbmdpbmdDb250
ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgoKSk7CisgICAgfQorICAgIHJl
dHVybiBoYW5naW5nQ29udGVudDsKK30KKworSW5saW5lTGF5b3V0VW5pdCBMaW5lQ29udGVudEFs
aWduZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxkZXI6OlJ1biYgcnVuKSBjb25z
dAoreworICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVuLnN0eWxlKCkuZm9udE1ldHJpY3MoKTsK
KyAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKQorICAgICAgICByZXR1
cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisKKyAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQo
KSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhl
aWdodCgpOworCisgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlv
dXRCb3gpOworICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJveCgpIHx8IGxheW91dEJveC5p
c0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkuY29udGVu
dEJveEhlaWdodCgpOworCisgICAgLy8gTm9uLXJlcGxhY2VkIGlubGluZSBib3ggKGUuZy4gaW5s
aW5lLWJsb2NrKS4gSXQgbG9va3MgYSBiaXQgbWlzbGVhZGluZyBidXQgdGhlaXIgbWFyZ2luIGJv
eCBpcyBjb25zaWRlcmVkIHRoZSBjb250ZW50IGhlaWdodCBoZXJlLgorICAgIHJldHVybiBib3hH
ZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKK30KKwogdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlkYXRpb25TdGF0ZSYgaW52YWxpZGF0aW9u
U3RhdGUsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93Q29udGVudCYgY29uc3RyYWludHMpCiB7
CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdDb250ZXh0TGF5b3V0LCBzdHJlYW0gPDwg
IltTdGFydF0gLT4gaW5saW5lIGZvcm1hdHRpbmcgY29udGV4dCAtPiBmb3JtYXR0aW5nIHJvb3Qo
IiA8PCAmcm9vdCgpIDw8ICIpIik7CkBAIC0xMzksNyArNDc0LDcgQEAgdm9pZCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJdGVtcyYgaW5saW5lSXRlbXMsIExpbmVM
YXlvdXRDb24KICAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG92ZXJmbG93Q29udGVudExlbmd0
aDsKICAgICB9OwogICAgIE9wdGlvbmFsPFByZXZpb3VzTGluZT4gcHJldmlvdXNMaW5lOwotICAg
IGF1dG8gbGluZSA9IExpbmVCdWlsZGVyIHsgKnRoaXMsIHJvb3QoKS5zdHlsZSgpLnRleHRBbGln
bigpLCBMaW5lQnVpbGRlcjo6SW50cmluc2ljU2l6aW5nOjpObyB9OworICAgIGF1dG8gbGluZSA9
IExpbmVCdWlsZGVyIHsgKnRoaXMgfTsKICAgICBhdXRvIGxpbmVMYXlvdXRDb250ZXh0ID0gTGlu
ZUxheW91dENvbnRleHQgeyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9OwogCiAgICAgd2hp
bGUgKCFuZWVkc0xheW91dFJhbmdlLmlzRW1wdHkoKSkgewpAQCAtMTQ4LDkgKzQ4Myw1MCBAQCB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5lTGF5b3V0KElubGluZUl0ZW1zJiBpbmxp
bmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICAvLyAic3BbPC1saW5lIGJyZWFrLT5dbGl0
X2NvbnRlbnQiIC0+IG92ZXJmbG93IGxlbmd0aDogMTEgLT4gbGVhZGluZyBwYXJ0aWFsIGNvbnRl
bnQgbGVuZ3RoOiAxMS4KICAgICAgICAgYXV0byBwYXJ0aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGgg
PSBwcmV2aW91c0xpbmUgPyBwcmV2aW91c0xpbmUtPm92ZXJmbG93Q29udGVudExlbmd0aCA6IFdU
Rjo6bnVsbG9wdDsKICAgICAgICAgYXV0byBsaW5lQ29udGVudCA9IGxpbmVMYXlvdXRDb250ZXh0
LmxheW91dElubGluZUNvbnRlbnQobGluZSwgbmVlZHNMYXlvdXRSYW5nZSwgcGFydGlhbExlYWRp
bmdDb250ZW50TGVuZ3RoKTsKKyAgICAgICAgYXV0byYgbGluZUJveCA9IGxpbmUubGluZUJveCgp
OworICAgICAgICBhdXRvIGxpbmVDb250ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVt
UmFuZ2U7CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGV2
ZW50dWFsbHkgZ2V0IG1lcmdlZCB0byBMaW5lQm94LgorICAgICAgICBhdXRvIGFsaWduTGluZUNv
bnRlbnQgPSBbJl0geworICAgICAgICAgICAgYXV0byBjb250ZW50QWxpZ25lciA9IExpbmVDb250
ZW50QWxpZ25lciB7ICp0aGlzLCBsaW5lQm94LCBsaW5lLnJ1bnMoKSwgbGluZS5hdmFpbGFibGVX
aWR0aCgpIH07CisgICAgICAgICAgICBjb250ZW50QWxpZ25lci5hZGp1c3RCYXNlbGluZUFuZExp
bmVIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChsaW5lLmlzVmlzdWFsbHlFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgbGluZUJveC5yZXNldEFsaWdubWVudEJhc2VsaW5lKCk7CisgICAgICAg
ICAgICAgICAgbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHsgfSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBjb250ZW50QWxpZ25lci5hbGlnblZlcnRpY2FsbHkoKTsKKworICAgICAgICAg
ICAgYXV0byBpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0geworICAgICAgICAgICAg
ICAgIGlmIChsaW5lQ29udGVudFJhbmdlLmVuZCA9PSBuZWVkc0xheW91dFJhbmdlLmVuZCkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdp
dGhJbmxpbmVDb250ZW50OjpZZXM7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50LnBh
cnRpYWxDb250ZW50KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGln
bmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAgICAgICAgICAgICAgIC8v
IE9taXQgZmxvYXRzIHRvIHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUg
Y29udGVudC4KKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8gaSA9IGxpbmVDb250ZW50UmFuZ2Uu
ZW5kOyBpLS07KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lSXRlbXNbaV0uaXNG
bG9hdCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRS
YW5nZS5lbmQgLSAxID8gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQ6OlllcyA6IExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50OjpObzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaGFz
IHRvIGJlIGF0IGxlYXN0IG9uZSBub24tZmxvYXQgaXRlbS4KKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGln
bmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAgICAgICAgICAgfSgpOwor
CisgICAgICAgICAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCA9IFsmXSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpICE9IFRleHRBbGln
bk1vZGU6Okp1c3RpZnkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290KCkuc3R5bGUo
KS50ZXh0QWxpZ24oKTsKKyAgICAgICAgICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2Nv
cmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0
eSwKKyAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBleGFjdGx5IGZpbGwgdGhlIGxpbmUg
Ym94LiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0ZXh0LWFsaWduLWxhc3QsCisgICAg
ICAgICAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhl
IGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAgICAgICAgICAgICBpZiAo
bGluZS5ydW5zKCkubGFzdCgpLmlzTGluZUJyZWFrKCkgfHwgaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50ID09IExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
OjpZZXMpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKKyAgICAgICAg
ICAgIH07CisgICAgICAgICAgICBjb250ZW50QWxpZ25lci5hbGlnbkhvcml6b250YWxseShjb21w
dXRlZEhvcml6b250YWxBbGlnbm1lbnQoKSwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsK
KyAgICAgICAgfTsKKworICAgICAgICBhbGlnbkxpbmVDb250ZW50KCk7CiAgICAgICAgIHNldERp
c3BsYXlCb3hlc0ZvckxpbmUobGluZSwgbGluZUNvbnRlbnQsIGNvbnN0cmFpbnRzLmhvcml6b250
YWwpOwogCi0gICAgICAgIGF1dG8gbGluZUNvbnRlbnRSYW5nZSA9IGxpbmVDb250ZW50LmlubGlu
ZUl0ZW1zOwogICAgICAgICBpZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQobmVlZHNMYXlvdXRSYW5nZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2Uu
ZW5kKTsKICAgICAgICAgICAgIGxpbmVMb2dpY2FsVG9wID0gbGluZS5saW5lQm94KCkubG9naWNh
bEJvdHRvbSgpOwpAQCAtMjQ4LDE0ICs2MjQsMTQgQEAgSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoSW4K
IHsKICAgICBhdXRvJiBpbmxpbmVJdGVtcyA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1z
KCk7CiAgICAgYXV0byBtYXhpbXVtTGluZVdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0g
ICAgYXV0byBsaW5lID0gTGluZUJ1aWxkZXIgeyAqdGhpcywgcm9vdCgpLnN0eWxlKCkudGV4dEFs
aWduKCksIExpbmVCdWlsZGVyOjpJbnRyaW5zaWNTaXppbmc6OlllcyB9OworICAgIGF1dG8gbGlu
ZSA9IExpbmVCdWlsZGVyIHsgKnRoaXMgfTsKICAgICBhdXRvIGxpbmVMYXlvdXRDb250ZXh0ID0g
TGluZUxheW91dENvbnRleHQgeyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9OwogICAgIGF1
dG8gbGF5b3V0UmFuZ2UgPSBMaW5lTGF5b3V0Q29udGV4dDo6SW5saW5lSXRlbVJhbmdlIHsgMCAs
IGlubGluZUl0ZW1zLnNpemUoKSB9OwogICAgIHdoaWxlICghbGF5b3V0UmFuZ2UuaXNFbXB0eSgp
KSB7CiAgICAgICAgIC8vIE9ubHkgdGhlIGhvcml6dG9uYWwgYXZhaWxhYmxlIHdpZHRoIGlzIGNv
bnN0cmFpbmVkIHdoZW4gY29tcHV0aW5nIGludHJpbnNpYyB3aWR0aC4KICAgICAgICAgbGluZS5p
bml0aWFsaXplKExpbmVCdWlsZGVyOjpDb25zdHJhaW50cyB7IHsgfSwgYXZhaWxhYmxlV2lkdGgs
IHsgfSwgZmFsc2UgfSk7CiAgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lTGF5b3V0Q29u
dGV4dC5sYXlvdXRJbmxpbmVDb250ZW50KGxpbmUsIGxheW91dFJhbmdlLCB7IH0pOwotICAgICAg
ICBsYXlvdXRSYW5nZS5zdGFydCA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1zLmVuZDsKKyAgICAg
ICAgbGF5b3V0UmFuZ2Uuc3RhcnQgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtUmFuZ2UuZW5kOwog
ICAgICAgICAvLyBGSVhNRTogVXNlIGxpbmUgbG9naWNhbCBsZWZ0IGFuZCByaWdodCB0byB0YWtl
IGZsb2F0cyBpbnRvIGFjY291bnQuCiAgICAgICAgIG1heGltdW1MaW5lV2lkdGggPSBzdGQ6Om1h
eChtYXhpbXVtTGluZVdpZHRoLCBsaW5lLmxpbmVCb3goKS5sb2dpY2FsV2lkdGgoKSk7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IDAzYjA5OTcxMDlkMjQ2YzAzNmI5YjcwYzVm
Y2ZlNTI1MzE2YTE3NTMuLmI2ZmZmYmQwNzUyZTBmMmRhOGUzODFiYmFkNTA0MWYzYWZiY2E4N2Qg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTQzLDM0NSArNDMsOSBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNXaGl0ZXNwYWNlUHJlc2VydmVkKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
ICAgICByZXR1cm4gd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpQcmUgfHwgd2hpdGVzcGFjZSA9
PSBXaGl0ZVNwYWNlOjpQcmVXcmFwIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFjZTo6QnJlYWtT
cGFjZXM7CiB9CiAKLXN0cnVjdCBIYW5naW5nQ29udGVudCB7Ci1wdWJsaWM6Ci0gICAgdm9pZCBy
ZXNldCgpOwotCi0gICAgSW5saW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2lkdGg7IH0KLSAgICBib29sIGlzQ29uZGl0aW9uYWwoKSBjb25zdCB7IHJldHVybiBtX2lzQ29u
ZGl0aW9uYWw7IH0KLQotICAgIHZvaWQgc2V0SXNDb25kaXRpb25hbCgpIHsgbV9pc0NvbmRpdGlv
bmFsID0gdHJ1ZTsgfQotICAgIHZvaWQgZXhwYW5kKElubGluZUxheW91dFVuaXQgd2lkdGgpIHsg
bV93aWR0aCArPSB3aWR0aDsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0NvbmRpdGlvbmFs
IHsgZmFsc2UgfTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fd2lkdGggeyAwIH07Ci19OwotCi12
b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgpCi17Ci0gICAgbV9pc0NvbmRpdGlvbmFsID0gZmFs
c2U7Ci0gICAgbV93aWR0aCA9ICAwOwotfQotCi1jbGFzcyBMaW5lQ29udGVudEFsaWduZXIgewot
cHVibGljOgotICAgIExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCYsIExpbmVCb3gmLCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxheW91dFVuaXQg
YXZhaWxhYmxlV2lkdGgpOwotCi0gICAgdm9pZCBhbGlnbkhvcml6b250YWxseShUZXh0QWxpZ25N
b2RlLCBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKLSAgICB2b2lk
IGFsaWduVmVydGljYWxseSgpOwotICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0
KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2
YWlsYWJsZVdpZHRoKTsKLSAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQo
TGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7Ci0gICAgSW5s
aW5lTGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mKSBj
b25zdDsKLQotICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29u
dGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KLSAgICBM
YXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4
dCgpLmxheW91dFN0YXRlKCk7IH0KLQotICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0
JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwotICAgIExpbmVCb3gmIG1fbGluZUJveDsKLSAg
ICBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOwotICAgIElubGluZUxheW91dFVuaXQgbV9h
dmFpbGFibGVXaWR0aDsKLX07Ci0KLUxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGln
bmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElubGluZUxh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCi0gICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0
KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9saW5lQm94KGxpbmVCb3gpCi0gICAg
LCBtX3J1bnMocnVucykKLSAgICAsIG1fYXZhaWxhYmxlV2lkdGgoYXZhaWxhYmxlV2lkdGgpCi17
Ci19Ci0KLXZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250YWxseShUZXh0QWxp
Z25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gY29s
bGVjdEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmUpOwotICAgIGF1dG8gYXZhaWxhYmxlV2lkdGgg
PSBtX2F2YWlsYWJsZVdpZHRoICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsKLSAgICBpZiAobV9y
dW5zLmlzRW1wdHkoKSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoaG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KSB7
Ci0gICAgICAgIGp1c3RpZnlSdW5zKGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGF1dG8gYWRqdXN0bWVudEZvckFsaWdubWVudCA9IFsmXSAoYXV0byBhdmFp
bGFibGVXaWR0aCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gewotICAgICAgICBzd2l0
Y2ggKGhvcml6b250YWxBbGlnbm1lbnQpIHsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpM
ZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0gICAgICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6
OldlYktpdFJpZ2h0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCwgMCk7
Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxJbmxp
bmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCAvIDIsIDApOwotICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICByZXR1cm4geyB9OwotICAgIH07Ci0KLSAgICBhdXRvIGFkanVzdG1lbnQgPSBh
ZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2YWlsYWJsZVdpZHRoKTsKLSAgICBpZiAoIWFkanVzdG1l
bnQpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBIb3Jpem9udGFsIGFsaWdubWVudCBtZWFucyB0
aGF0IHdlIG5vdCBvbmx5IGFkanVzdCB0aGUgcnVucyBidXQgYWxzbyBtYWtlIHN1cmUKLSAgICAv
LyB0aGF0IHRoZSBsaW5lIGJveCBpcyBhbGlnbmVkIGFzIHdlbGwKLSAgICAvLyBlLmcuIDxkaXYg
c3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgd2lkdGg6IDEwMHB4OyI+Y2VudGVyZWQgdGV4dDwv
ZGl2PiA6IHRoZSBsaW5lIGJveCB3aWxsIGFsc28gYmUgY2VudGVyZWQKLSAgICAvLyBhcyBvcHBv
c2VkIHRvIHN0YXJ0IGF0IDBweCBhbGwgdGhlIHdheSB0byBbY2VudGVyZWQgdGV4dF0gcnVuJ3Mg
cmlnaHQgZWRnZS4KLSAgICBtX2xpbmVCb3gubW92ZUhvcml6b250YWxseSgqYWRqdXN0bWVudCk7
Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpCi0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRh
bGx5KCphZGp1c3RtZW50KTsKLX0KLQotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWduVmVy
dGljYWxseSgpCi17Ci0gICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0ID0gbV9saW5lQm94
LmxvZ2ljYWxSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAg
YXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgIGF1dG8mIGxh
eW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduID0g
bGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwotICAgICAgICBhdXRvIGFzY2VudCA9
IGxheW91dEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7Ci0KLSAgICAgICAgc3dp
dGNoICh2ZXJ0aWNhbEFsaWduKSB7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxp
bmU6Ci0gICAgICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkgfHwgcnVuLmlzVGV4dCgpKQot
ICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUo
KSAtIGFzY2VudDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkp
IHsKLSAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9w
ID0gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSBhc2NlbnQgLSBib3hHZW9tZXRyeS5i
b3JkZXJUb3AoKSAtIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAg
ICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJv
eC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5l
Rm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7Ci0gICAg
ICAgICAgICAgICAgLy8gU3BlYyBtYWtlcyB1cyBnZW5lcmF0ZSBhdCBsZWFzdCBvbmUgbGluZSAt
ZXZlbiBpZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICBhdXRvIGlubGluZUJsb2NrQmFz
ZWxpbmUgPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVz
Lmxhc3QoKS5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgIC8vIFRoZSBpbmxpbmUtYmxvY2sn
cyBiYXNlbGluZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gaXRzIGNvbnRlbnQgYm94LiBMZXQncyBj
b252ZXJ0IGl0IHJlbGF0aXZlIHRvIHRoZSBtYXJnaW4gYm94LgotICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICBfX19fX19fX19fX19fX18gPC0gbWFyZ2luIGJveAotICAgICAgICAgICAgICAg
IC8vICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8ICBfX19fX19fX19f
X18gIDwtIGJvcmRlciBib3gKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwKLSAgICAg
ICAgICAgICAgICAvLyAgICAgICAgICB8IHwgIF9fX19fX19fXyAgPC0gY29udGVudCBib3gKLSAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIF4KLSAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICB8IHwgfCAgIHwgIDwtIGJhc2VsaW5lIG9mZnNldAotICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgIHwgfCB8ICAgfAotICAgICAgICAgICAgICAgIC8vICAgICB0ZXh0IHwgfCB8ICAg
diB0ZXh0Ci0gICAgICAgICAgICAgICAgLy8gICAgIC0tLS0tfC18LXwtLS0tLS0tLS0tIDwtIGJh
c2VsaW5lCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAg
ICAgICAgICAgICAgICBhdXRvIGJhc2VsaW5lRnJvbU1hcmdpbkJveCA9IGJveEdlb21ldHJ5Lm1h
cmdpbkJlZm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRk
aW5nVG9wKCkudmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7Ci0gICAgICAgICAgICAg
ICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYmFzZWxpbmVG
cm9tTWFyZ2luQm94OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJh
c2VsaW5lKCkgLSAoYm94R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGJveEdlb21ldHJ5LnZl
cnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMF9sdSkgKyBydW4ubG9naWNhbFJlY3QoKS5oZWlnaHQo
KSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAg
bG9naWNhbFRvcCA9IDBfbHU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0
aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94Lmxv
Z2ljYWxCb3R0b20oKSAtIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVO
VEVEX1lFVCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcnVuLmFk
anVzdExvZ2ljYWxUb3AobG9naWNhbFRvcCk7Ci0gICAgICAgIC8vIEFkanVzdCBzY3JvbGxhYmxl
IG92ZXJmbG93IGlmIHRoZSBydW4gb3ZlcmZsb3dzIHRoZSBsaW5lLgotICAgICAgICBzY3JvbGxh
YmxlT3ZlcmZsb3dSZWN0LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuLmxvZ2ljYWxSZWN0
KCkpOwotICAgICAgICAvLyBDb252ZXJ0IHJ1bnMgZnJvbSByZWxhdGl2ZSB0byB0aGUgbGluZSB0
b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290J3MgYm9yZGVyIGJveCB0b3AvbGVmdC4KLSAg
ICAgICAgcnVuLm1vdmVWZXJ0aWNhbGx5KG1fbGluZUJveC5sb2dpY2FsVG9wKCkpOwotICAgICAg
ICBydW4ubW92ZUhvcml6b250YWxseShtX2xpbmVCb3gubG9naWNhbExlZnQoKSk7Ci0gICAgfQot
ICAgIG1fbGluZUJveC5zZXRTY3JvbGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92ZXJmbG93UmVj
dCk7Ci19Ci0KLXZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyhJbmxpbmVMYXlv
dXRVbml0IGF2YWlsYWJsZVdpZHRoKQotewotICAgIEFTU0VSVChhdmFpbGFibGVXaWR0aCA+IDAp
OwotICAgIC8vIENvbGxlY3QgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0eSBudW1iZXJzIGFuZCBm
aW5kIHRoZSBsYXN0IHJ1biB3aXRoIGNvbnRlbnQuCi0gICAgYXV0byBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50ID0gMDsKLSAgICBMaW5lQnVpbGRlcjo6UnVuKiBsYXN0UnVuV2l0aENvbnRlbnQg
PSBudWxscHRyOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAgICAgIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKTsK
LSAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSkKLSAgICAgICAgICAgIGxh
c3RSdW5XaXRoQ29udGVudCA9ICZydW47Ci0gICAgfQotICAgIC8vIE5lZWQgdG8gZml4IHVwIHRo
ZSBsYXN0IHJ1bidzIHRyYWlsaW5nIGV4cGFuc2lvbi4KLSAgICBpZiAobGFzdFJ1bldpdGhDb250
ZW50ICYmIGxhc3RSdW5XaXRoQ29udGVudC0+aGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewot
ICAgICAgICAvLyBUdXJuIG9mZiB0aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBhbmQgYWRkIHRoZSBm
b3JiaWQgdHJhaWxpbmcgZXhwYW5zaW9uLgotICAgICAgICBhdXRvIGxlYWRpbmdFeHBhbnNpb24g
PSBsYXN0UnVuV2l0aENvbnRlbnQtPmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWFkaW5nRXhwYW5z
aW9uTWFzazsKLSAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50LT5zZXRFeHBhbnNpb25CZWhhdmlv
cihsZWFkaW5nRXhwYW5zaW9uIHwgRm9yYmlkVHJhaWxpbmdFeHBhbnNpb24pOwotICAgIH0KLSAg
ICAvLyBOb3RoaW5nIHRvIGRpc3RyaWJ1dGU/Ci0gICAgaWYgKCFleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3Bh
Y2UuCi0gICAgYXV0byBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCAvIGV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQ7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBhY2N1bXVsYXRl
ZEV4cGFuc2lvbiA9IDA7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAg
Ly8gRXhwYW5kIGFuZCBtb3ZlcyBydW5zIGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBhbnNpb24uCi0g
ICAgICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKLSAgICAgICAgICAg
IHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChydW4uZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudCgpKTsKLSAgICAgICAgYXV0byBjb21wdXRlZEV4cGFuc2lvbiA9IGV4cGFuc2lv
blRvRGlzdHJpYnV0ZSAqIHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7Ci0gICAgICAg
IHJ1bi5zZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24oY29tcHV0ZWRFeHBhbnNpb24pOwot
ICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAg
ICAgIGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGNvbXB1dGVkRXhwYW5zaW9uOwotICAgIH0KLX0K
LQotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgp
Ci17Ci0gICAgdW5zaWduZWQgaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKLSAgICBh
dXRvIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8m
IHJ1biA6IG1fcnVucykgewotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94
KCk7Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0KLSAgICAgICAg
cnVuLnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKLQotICAgICAgICBp
ZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICAvLyBG
b3IgdGV4dCBjb250ZW50IHdlIHNldCB0aGUgYmFzZWxpbmUgZWl0aGVyIHRocm91Z2ggdGhlIGlu
aXRpYWwgc3RydXQgKHNldCBieSB0aGUgZm9ybWF0dGluZyBjb250ZXh0IHJvb3QpIG9yCi0gICAg
ICAgICAgICAvLyB0aHJvdWdoIHRoZSBpbmxpbmUgY29udGFpbmVyIChzdGFydCkuIE5vcm1hbGx5
IHRoZSB0ZXh0IGNvbnRlbnQgaXRzZWxmIGRvZXMgbm90IHN0cmV0Y2ggdGhlIGxpbmUuCi0gICAg
ICAgICAgICBpZiAoaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UndmUgYWxyZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhy
b3VnaCB0aGUgcGFyZW50IGlubGluZSBjb250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JM
aW5lQnJlYWspIHsKLSAgICAgICAgICAgICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4g
b3IgPGRpdj48c3Bhbj5uZXN0ZWQ8c3Bhbj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KLSAgICAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhc1NlZW5E
aXJlY3RUZXh0T3JMaW5lQnJlYWsgPSB0cnVlOwotICAgICAgICAgICAgLy8gV2UgYXJlIGluIHF1
aXJrcyBtb2RlIHdoZXJlIHRoZSBmb250LW1ldHJpY3MgbWlnaHQgY2hhbmdlIHRoZSBsaW5lIGxp
bmUgaGVpZ2h0L2Jhc2VsaW5lIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0ZXh0IGNvbnRlbnQgb24g
dGhlIGxpbmUKLSAgICAgICAgICAgIC8vIG91dHNpZGUgb2YgYW4gaW5saW5lIGNvbnRhaW5lci4K
LSAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdN
ZXRyaWNzKHN0eWxlLmZvbnRNZXRyaWNzKCksIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsK
LSAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcuYXNj
ZW50KTsKLSAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFk
aW5nLmRlc2NlbnQpOwotICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdy
ZWF0ZXIoaGFsZkxlYWRpbmcuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAg
ICAgKytpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUg
Y29udGFpbmVycyBzdHJldGNoIHRoZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAg
ICAgIC8vIFZlcnRpY2FsIG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRy
aWJ1dGUgdG8gdGhlIGxpbmUgaGVpZ2h0LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3Mg
PSBzdHlsZS5mb250TWV0cmljcygpOwotICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxp
Z24oKSA9PSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8g
aGFsZkxlYWRpbmcgPSBMaW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNz
LCBzdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gQm90aCBo
YWxmbGVhZGluZyBhc2NlbnQgYW5kIGRlc2NlbnQgY291bGQgYmUgbmVnYXRpdmUgKHRhbGwgZm9u
dCB2cy4gc21hbGwgbGluZS1oZWlnaHQgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGhhbGZM
ZWFkaW5nLmRlc2NlbnQgPiAwKQotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0RGVz
Y2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5kZXNjZW50KTsKLSAgICAgICAgICAgICAgICBpZiAo
aGFsZkxlYWRpbmcuYXNjZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNl
dEFzY2VudElmR3JlYXRlcihoYWxmTGVhZGluZy5hc2NlbnQpOwotICAgICAgICAgICAgICAgIG1f
bGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1fbGluZUJveC5hc2NlbnRBbmREZXNj
ZW50KCkuaGVpZ2h0KCkpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9s
aW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQ29u
dGFpbmVyRW5kKCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhl
aWdodCBoYXZlIGFscmVhZHkgYmVlbiBhZGp1c3RlZCBhdCBDb250YWluZXJTdGFydC4KLSAgICAg
ICAgICAgIEFTU0VSVChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpOwotICAgICAgICAgICAg
LS1pbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChydW4uaXNCb3goKSkgewotICAgICAgICAgICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJv
eCk7Ci0gICAgICAgICAgICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdp
bkJveEhlaWdodCgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24o
KSkgewotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAg
ICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5l
c3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gSW5saW5lLWJsb2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZlIGJhc2Vs
aW5lcy4KLSAgICAgICAgICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0
U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWlu
ZXJCb3g+KGxheW91dEJveCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8g
YmUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAg
ICAgICAgIGF1dG8mIGxhc3RMaW5lQm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVD
b250ZW50KCktPmxpbmVCb3hlcy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYmVm
b3JlSGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3Jk
ZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAgICAg
ICAgICAgICAgICBtX2xpbmVCb3guc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYmVmb3Jl
SGVpZ2h0ICsgbGFzdExpbmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
bGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTm9uIGlubGluZS1i
bG9jayBib3hlcyBzaXQgb24gdGhlIGJhc2VsaW5lIChpbmNsdWRpbmcgdGhlaXIgYm90dG9tIG1h
cmdpbikuCi0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIo
bWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZl
IGRlc2NlbnQgKHllcywgbmVnYXRpdmUgZGVzY2VudCBpcyBhIHRoaW5nKS4KLSAgICAgICAgICAg
ICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVp
Z2h0ICsgc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oMCwgbV9saW5lQm94LmFzY2VudEFuZERl
c2NlbnQoKS5kZXNjZW50KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6
Ci0gICAgICAgICAgICAgICAgLy8gVG9wIGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUg
YmFzZWxpbmUsIGl0IG9ubHkgcHVzaGVzIHRoZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBk
b3duLgotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVy
KG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbTogewotICAgICAgICAgICAgICAgIC8vIEJvdHRvbSBh
bGlnbmVkLCB0YWxsIGNvbnRlbnQgcHVzaGVzIHRoZSBiYXNlbGluZSBmdXJ0aGVyIGRvd24gZnJv
bSB0aGUgbGluZSB0b3AuCi0gICAgICAgICAgICAgICAgYXV0byBsaW5lTG9naWNhbEhlaWdodCA9
IG1fbGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmdpbkJv
eEhlaWdodCA+IGxpbmVMb2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGlu
ZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihtX2xp
bmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSArIChtYXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNh
bEhlaWdodCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1IYW5n
aW5nQ29udGVudCBMaW5lQ29udGVudEFsaWduZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudChMaW5l
QnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5l
Q29udGVudCkgY29uc3QKLXsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2luZ0NvbnRl
bnQgeyB9OwotICAgIGlmIChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPT0gTGluZUJ1aWxk
ZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICBoYW5naW5nQ29u
dGVudC5zZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VS
ZXZlcnNlZFJhbmdlKG1fcnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0
KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBoYW5naW5nQ29udGVudC5z
ZXRJc0NvbmRpdGlvbmFsKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoIXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVz
cGFjZS4KLSAgICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNl
OjpQcmVXcmFwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIFRoaXMgaXMgZWl0aGVy
IGEgbm9ybWFsIG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgot
ICAgICAgICBoYW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRo
KCkpOwotICAgIH0KLSAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Ci19Ci0KLUlubGluZUxheW91
dFVuaXQgTGluZUNvbnRlbnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWls
ZGVyOjpSdW4mIHJ1bikgY29uc3QKLXsKLSAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHls
ZSgpLmZvbnRNZXRyaWNzKCk7Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJl
YWsoKSkKLSAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgaWYgKHJ1
bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgIHJl
dHVybiBmb250TWV0cmljcy5oZWlnaHQoKTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5s
YXlvdXRCb3goKTsKLSAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRC
b3goKSB8fCBsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgcmV0dXJu
IGJveEdlb21ldHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKLQotICAgIC8vIE5vbi1yZXBsYWNlZCBp
bmxpbmUgYm94IChlLmcuIGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcg
YnV0IHRoZWlyIG1hcmdpbiBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVy
ZS4KLSAgICByZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci19Ci0KLUxpbmVC
dWlsZGVyOjpMaW5lQnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQsIE9wdGlvbmFsPFRleHRBbGlnbk1vZGU+IGhvcml6b250YWxBbGln
bm1lbnQsIEludHJpbnNpY1NpemluZyBpbnRyaW5zaWNTaXppbmcpCitMaW5lQnVpbGRlcjo6TGlu
ZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdD
b250ZXh0KQogICAgIDogbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCkKICAgICAsIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykKLSAgICAs
IG1faG9yaXpvbnRhbEFsaWdubWVudChob3Jpem9udGFsQWxpZ25tZW50KQotICAgICwgbV9pc0lu
dHJpbnNpY1NpemluZyhpbnRyaW5zaWNTaXppbmcgPT0gSW50cmluc2ljU2l6aW5nOjpZZXMpCiAg
ICAgLCBtX3Nob3VsZElnbm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyhSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRp
b25FbmFibGVkKCkpCiB7CiB9CkBAIC00MTIsNyArNzYsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpj
bGVhcigpCiAgICAgbV9saW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdD
b250ZW50ID0geyB9OwogfQogCi12b2lkIExpbmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5lV2l0
aElubGluZUNvbnRlbnQgaXNMYXN0TGluZSkKK3ZvaWQgTGluZUJ1aWxkZXI6OmNsb3NlKCkKIHsK
ICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIG1faXNDbG9zZWQgPSB0cnVlOwpAQCAtNDIxLDI5ICs4
NSw2IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmNsb3NlKElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dCBpc0xhc3RMaW5lKQogICAgIC8vIDIuIEFsaWduIG1lcmdlZCBydW5zIGJvdGggdmVydGljYWxs
eSBhbmQgaG9yaXpvbnRhbGx5LgogICAgIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgp
OwogICAgIHZpc3VhbGx5Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KCk7Ci0gICAgaWYg
KG1faXNJbnRyaW5zaWNTaXppbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGVu
dEFsaWduZXIgPSBMaW5lQ29udGVudEFsaWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpLCBtX2xp
bmVCb3gsIG1fcnVucywgYXZhaWxhYmxlV2lkdGgoKSB9OwotICAgIGNvbnRlbnRBbGlnbmVyLmFk
anVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpOwotICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkoKSkg
ewotICAgICAgICBtX2xpbmVCb3gucmVzZXRBbGlnbm1lbnRCYXNlbGluZSgpOwotICAgICAgICBt
X2xpbmVCb3guc2V0TG9naWNhbEhlaWdodCh7IH0pOwotICAgIH0KLSAgICBjb250ZW50QWxpZ25l
ci5hbGlnblZlcnRpY2FsbHkoKTsKLQotICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25t
ZW50ID0gWyZdIHsKLSAgICAgICAgQVNTRVJUKG1faG9yaXpvbnRhbEFsaWdubWVudCk7Ci0gICAg
ICAgIGlmIChtX2hvcml6b250YWxBbGlnbm1lbnQgIT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkK
LSAgICAgICAgICAgIHJldHVybiAqbV9ob3Jpem9udGFsQWxpZ25tZW50OwotICAgICAgICAvLyBU
ZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1ldGhvZCBzcGVjaWZpZWQgYnkgdGhl
IHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKLSAgICAgICAgLy8gaW4gb3JkZXIgdG8gZXhhY3RseSBm
aWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgdGV4dC1hbGln
bi1sYXN0LAotICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhayBv
ciB0aGUgZW5kIG9mIHRoZSBibG9jayBpcyBzdGFydC1hbGlnbmVkLgotICAgICAgICBpZiAobV9y
dW5zLmxhc3QoKS5pc0xpbmVCcmVhaygpIHx8IGlzTGFzdExpbmUgPT0gTGluZUJ1aWxkZXI6Oklz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICAgICAgcmV0dXJuIFRleHRB
bGlnbk1vZGU6OlN0YXJ0OwotICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsK
LSAgICB9OwotICAgIGNvbnRlbnRBbGlnbmVyLmFsaWduSG9yaXpvbnRhbGx5KGNvbXB1dGVkSG9y
aXpvbnRhbEFsaWdubWVudCgpLCBpc0xhc3RMaW5lKTsKIH0KIAogdm9pZCBMaW5lQnVpbGRlcjo6
cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCkKQEAgLTQ1NCwxMCArOTUsMTAgQEAgdm9p
ZCBMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCkKICAgICAvLyBD
b21wbGV4IGxpbmUgbGF5b3V0IHF1aXJrOiBrZWVwIHRoZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGFy
b3VuZCB3aGVuIGl0IGlzIGZvbGxvd2VkIGJ5IGEgbGluZSBicmVhaywgdW5sZXNzIHRoZSBjb250
ZW50IG92ZXJmbG93cyB0aGUgbGluZS4KICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5sYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxl
ZCgpKSB7CiAgICAgICAgIGF1dG8gaXNUZXh0QWxpZ25SaWdodCA9IFsmXSB7Ci0gICAgICAgICAg
ICBBU1NFUlQobV9ob3Jpem9udGFsQWxpZ25tZW50KTsKLSAgICAgICAgICAgIHJldHVybiBtX2hv
cml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6UmlnaHQKLSAgICAgICAgICAgICAg
ICB8fCBtX2hvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQK
LSAgICAgICAgICAgICAgICB8fCBtX2hvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9k
ZTo6RW5kOworICAgICAgICAgICAgYXV0byB0ZXh0QWxpZ24gPSBmb3JtYXR0aW5nQ29udGV4dCgp
LnJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpOworICAgICAgICAgICAgcmV0dXJuIHRleHRBbGln
biA9PSBUZXh0QWxpZ25Nb2RlOjpSaWdodAorICAgICAgICAgICAgICAgIHx8IHRleHRBbGlnbiA9
PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodAorICAgICAgICAgICAgICAgIHx8IHRleHRBbGln
biA9PSBUZXh0QWxpZ25Nb2RlOjpFbmQ7CiAgICAgICAgICAgICB9KCk7CiAKICAgICAgICAgaWYg
KG1fcnVucy5sYXN0KCkuaXNMaW5lQnJlYWsoKSAmJiBhdmFpbGFibGVXaWR0aCgpID49IDAgJiYg
IWlzVGV4dEFsaWduUmlnaHQpIHsKQEAgLTcwNSwxMSArMzQ2LDcgQEAgYm9vbCBMaW5lQnVpbGRl
cjo6aXNWaXN1YWxseU5vbkVtcHR5KGNvbnN0IFJ1biYgcnVuKSBjb25zdAogICAgICAgICBpZiAo
cnVuLmxheW91dEJveCgpLmlzUmVwbGFjZWRCb3goKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICBBU1NFUlQocnVuLmxheW91dEJveCgpLmlzSW5saW5lQmxvY2tCb3goKSB8fCBy
dW4ubGF5b3V0Qm94KCkuaXNJbmxpbmVUYWJsZUJveCgpKTsKLSAgICAgICAgaWYgKCFydW4ubG9n
aWNhbFdpZHRoKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChtX2lz
SW50cmluc2ljU2l6aW5nIHx8IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gocnVu
LmxheW91dEJveCgpKS5oZWlnaHQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBydW4ubG9naWNhbFdpZHRoKCk7CiAgICAg
fQogCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRleCA0
YjZjZWJmMjEyNzU4ZDE5ZTdkNDY3ZTYyNzMyZmE2OWIxMjE5YjA3Li44ZTRkOTU2MGExMTY3ZDE3
MGQ2ODdkNzVjMDExNWQxOWJiYmFhNWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTQ4LDE0
ICs0OCwxMSBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0
IHsgZmFsc2UgfTsKICAgICB9OwogCi0gICAgZW51bSBjbGFzcyBJbnRyaW5zaWNTaXppbmcgeyBO
bywgWWVzIH07Ci0gICAgTGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
LCBPcHRpb25hbDxUZXh0QWxpZ25Nb2RlPiwgSW50cmluc2ljU2l6aW5nKTsKKyAgICBMaW5lQnVp
bGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwogICAgIH5MaW5lQnVpbGRlcigp
OwogCiAgICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IENvbnN0cmFpbnRzJik7Ci0KLSAgICBlbnVt
IGNsYXNzIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCB7IE5vLCBZZXMgfTsKLSAgICB2b2lk
IGNsb3NlKElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgdm9pZCBjbG9zZSgpOwog
CiAgICAgdm9pZCBhcHBlbmQoY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9n
aWNhbFdpZHRoKTsKICAgICB2b2lkIGFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJdGVtKGNvbnN0
IElubGluZVRleHRJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVl
ZHNIeXBlbik7CkBAIC02OCw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzVHJhaWxpbmdS
dW5GdWxseVRyaW1tYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250
ZW50LmlzVHJhaWxpbmdSdW5GdWxseVRyaW1tYWJsZSgpOyB9CiAKICAgICBjb25zdCBMaW5lQm94
JiBsaW5lQm94KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQm94OyB9CisgICAgTGluZUJveCYgbGlu
ZUJveCgpIHsgcmV0dXJuIG1fbGluZUJveDsgfQogICAgIHZvaWQgbW92ZUxvZ2ljYWxMZWZ0KElu
bGluZUxheW91dFVuaXQpOwogICAgIHZvaWQgbW92ZUxvZ2ljYWxSaWdodChJbmxpbmVMYXlvdXRV
bml0KTsKICAgICB2b2lkIHNldEhhc0ludHJ1c2l2ZUZsb2F0KCkgeyBtX2hhc0ludHJ1c2l2ZUZs
b2F0ID0gdHJ1ZTsgfQpAQCAtMTQ0LDYgKzE0Miw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHVz
aW5nIFJ1bkxpc3QgPSBWZWN0b3I8UnVuLCAxMD47CiAgICAgY29uc3QgUnVuTGlzdCYgcnVucygp
IGNvbnN0IHsgcmV0dXJuIG1fcnVuczsgfQorICAgIFJ1bkxpc3QmIHJ1bnMoKSB7IHJldHVybiBt
X3J1bnM7IH0KIAogICAgIHN0YXRpYyBBc2NlbnRBbmREZXNjZW50IGhhbGZMZWFkaW5nTWV0cmlj
cyhjb25zdCBGb250TWV0cmljcyYsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQp
OwogCkBAIC0xOTgsOCArMTk3LDYgQEAgcHJpdmF0ZToKICAgICBSdW5MaXN0IG1fcnVuczsKICAg
ICBUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQ7CiAg
ICAgSW5saW5lTGF5b3V0VW5pdCBtX2xpbmVMb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgT3B0aW9u
YWw8VGV4dEFsaWduTW9kZT4gbV9ob3Jpem9udGFsQWxpZ25tZW50OwotICAgIGJvb2wgbV9pc0lu
dHJpbnNpY1NpemluZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0ludHJ1c2l2ZUZsb2F0IHsg
ZmFsc2UgfTsKICAgICBMaW5lQm94IG1fbGluZUJveDsKICAgICBPcHRpb25hbDxib29sPiBtX2xp
bmVJc1Zpc3VhbGx5RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5
b3V0Q29udGV4dC5jcHAKaW5kZXggNThkZTYxM2EwZjM4MzI3OWY5MWI3ZjQzYWE5ODBjYzljMzg3
ZDA5Yy4uODAyYmVkZDhkNzMxNzUyNTgzM2E0NzQwOGRmMTBkNTQxNzhiMjk5OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVM
YXlvdXRDb250ZXh0LmNwcApAQCAtMzMyLDIyICszMzIsNyBAQCBMaW5lTGF5b3V0Q29udGV4dDo6
TGluZUNvbnRlbnQgTGluZUxheW91dENvbnRleHQ6OmNsb3NlKExpbmVCdWlsZGVyJiBsaW5lLCBj
b25zdAogICAgIGF1dG8gdHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFy
dCArIG51bWJlck9mQ29tbWl0dGVkSXRlbXMgLSAxOwogICAgIGF1dG8gbGluZVJhbmdlID0gSW5s
aW5lSXRlbVJhbmdlIHsgbGF5b3V0UmFuZ2Uuc3RhcnQsIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4
ICsgMSB9OwogICAgIEFTU0VSVChsaW5lUmFuZ2UuZW5kIDw9IGxheW91dFJhbmdlLmVuZCk7Ci0K
LSAgICBhdXRvIGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9IFsmXSB7Ci0gICAgICAgIGlm
IChsaW5lUmFuZ2UuZW5kID09IGxheW91dFJhbmdlLmVuZCkKLSAgICAgICAgICAgIHJldHVybiBM
aW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXM7Ci0gICAgICAgIGlm
IChwYXJ0aWFsQ29udGVudCkKLSAgICAgICAgICAgIHJldHVybiBMaW5lQnVpbGRlcjo6SXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKLSAgICAgICAgLy8gT21pdCBmbG9hdHMgdG8gc2Vl
IGlmIHRoaXMgaXMgdGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBjb250ZW50LgotICAgICAgICBm
b3IgKGF1dG8gaSA9IGxheW91dFJhbmdlLmVuZDsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFt
X2lubGluZUl0ZW1zW2ldLmlzRmxvYXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA9PSB0
cmFpbGluZ0lubGluZUl0ZW1JbmRleCA/IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGlu
ZUNvbnRlbnQ6OlllcyA6IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6
Ok5vOwotICAgICAgICB9Ci0gICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUg
bm9uLWZsb2F0IGl0ZW0uCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87Ci0gICAg
fSgpOwotICAgIGxpbmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICBs
aW5lLmNsb3NlKCk7CiAgICAgLy8gQWRqdXN0IGh5cGhlbmF0ZWQgbGluZSBjb3VudC4KICAgICBt
X3N1Y2Nlc3NpdmVIeXBoZW5hdGVkTGluZUNvdW50ID0gcGFydGlhbENvbnRlbnQgJiYgcGFydGlh
bENvbnRlbnQtPnRyYWlsaW5nQ29udGVudEhhc0h5cGhlbiA/IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0
ZWRMaW5lQ291bnQgKyAxIDogMDsKICAgICByZXR1cm4gTGluZUNvbnRlbnQgeyBwYXJ0aWFsQ29u
dGVudCwgbGluZVJhbmdlLCBXVEZNb3ZlKG1fZmxvYXRzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgK
aW5kZXggMzRiOGZjYjlkYzRhZjU3Y2YyODZkYmFlNmMwOThlMjZjY2MzOGMwMi4uMmQyZmU1ZDIz
NDA2YTgzM2M4MjU3ZDk4NTJhMmM4M2Y1MjJlZmE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCkBA
IC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHVuc2lnbmVkIG92ZXJmbG93Q29u
dGVudExlbmd0aCB7IDAgfTsKICAgICAgICAgfTsKICAgICAgICAgT3B0aW9uYWw8UGFydGlhbENv
bnRlbnQ+IHBhcnRpYWxDb250ZW50OwotICAgICAgICBJbmxpbmVJdGVtUmFuZ2UgaW5saW5lSXRl
bXM7CisgICAgICAgIElubGluZUl0ZW1SYW5nZSBpbmxpbmVJdGVtUmFuZ2U7CiAgICAgICAgIHN0
cnVjdCBGbG9hdCB7CiAgICAgICAgICAgICBib29sIGlzSW50cnVzaXZlIHsgdHJ1ZSB9OwogICAg
ICAgICAgICAgY29uc3QgSW5saW5lSXRlbSogaXRlbSB7IG51bGxwdHIgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407309</attachid>
            <date>2020-08-26 10:16:04 -0700</date>
            <delta_ts>2020-08-26 11:00:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215016-20200826101604.patch</filename>
            <type>text/plain</type>
            <size>49908</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYwNzkxOGQ5NjI3ZWVk
OTA2NmZlNjEyYTM1ZDZiZjg3ZTgyZTI3Yy4uMTFhOTlkMTk0ODYzOWY1Mzc2Y2VmMTBjMGU3ZTRh
NjIzODQxMmVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYxIEBACiAyMDIwLTA4LTI2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlciBzaG91bGQgbm90IGFsaWduIHRoZSBydW5zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBtb3Zpbmcg
YWxpZ25tZW50IGxvZ2ljIG92ZXIgdG8gdGhlIExpbmVCb3guCisgICAgICAgIExpbmVCdWlsZGVy
IGlzIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgY29udGVudCB0byB0aGUgbGluZSwgYnV0IHRoZSBm
aW5hbCBhbGlnbm1lbnQgd2lsbCBiZSBkb25lIGJ5IHRoZSBMaW5lQm94LgorICAgICAgICBUaGlz
IHdvcmtzIHdlbGwgd2l0aCBwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24sIHdoZXJlIHdlIHVz
ZSB0aGUgTGluZUJ1aWxkZXIgdG8gY29tcHV0ZSBsaW5lIHdpZHRoIGJ1dCB3ZQorICAgICAgICBk
b24ndCByZWFsbHkgbmVlZCB0byBjb25zdHJ1Y3QgYSBMaW5lQm94IChhbmQgbm8gYWxpZ25tZW50
IGlzIG5lZWRlZCkuICAKKworICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2lu
Z0NvbnRlbnQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2lu
Z0NvbnRlbnQ6OmlzQ29uZGl0aW9uYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpIYW5naW5nQ29udGVudDo6c2V0SXNDb25kaXRpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkhhbmdpbmdDb250ZW50OjpleHBhbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpIYW5naW5nQ29udGVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Q29udGVudEFsaWduZXI6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGln
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGln
bkhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxp
Z25lcjo6YWxpZ25WZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNv
bnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVDb250ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpjb2xsZWN0SGFuZ2luZ0NvbnRl
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6
OnJ1bkNvbnRlbnRIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29u
c3RyYWludCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
TGluZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxp
bmdUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OmlzVmlzdWFsbHlOb25FbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkhhbmdpbmdDb250ZW50Ojp3aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50Ojppc0NvbmRpdGlvbmFsIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6OnNldElzQ29uZGl0aW9u
YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpIYW5naW5nQ29udGVudDo6
ZXhwYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50OjpyZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6
OmxheW91dFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVy
OjphbGlnblZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWdu
ZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1
aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxpbmVCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cnVucyk6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UpOgorICAgICAgICAq
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0Lmg6CisKKzIwMjAtMDgt
MjUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKwogICAgICAgICBbTEZDXVtJRkNd
IE1vdmUgaW5saW5lIHJ1biBhbGlnbm1lbnQgbG9naWMgdG8gYSBkZWRpY2F0ZWQgY2xhc3MKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDUyNwogICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNjYxMTU3OTY+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKaW5kZXggY2Q4ZmExYjIwYzg0MDdkODUyODRjOTU5Y2Q0NzZhZDgyMTlkMzU3ZS4u
NTM3ZDRmYmJlNTMwZmJjNTRhZGQ0YzQwMTYxMzA0YWFlYTFkM2U4ZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNzYsNiArNzYsMzMzIEBAIHN0YXRpYyBpbmxpbmUg
Y29uc3QgQm94KiBuZXh0SW5saW5lTGV2ZWxCb3hUb0xheW91dChjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorc3RydWN0IEhhbmdpbmdDb250ZW50
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBJbmxpbmVMYXlvdXRVbml0IHdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIGJvb2wgaXNDb25kaXRpb25hbCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNDb25kaXRpb25hbDsgfQorCisgICAgdm9pZCBzZXRJc0NvbmRp
dGlvbmFsKCkgeyBtX2lzQ29uZGl0aW9uYWwgPSB0cnVlOyB9CisgICAgdm9pZCBleHBhbmQoSW5s
aW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3dpZHRoICs9IHdpZHRoOyB9CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBtX2lzQ29uZGl0aW9uYWwgeyBmYWxzZSB9OworICAgIElubGluZUxheW91dFVuaXQg
bV93aWR0aCB7IDAgfTsKK307CisKK3ZvaWQgSGFuZ2luZ0NvbnRlbnQ6OnJlc2V0KCkKK3sKKyAg
ICBtX2lzQ29uZGl0aW9uYWwgPSBmYWxzZTsKKyAgICBtX3dpZHRoID0gIDA7Cit9CisKK2NsYXNz
IExpbmVDb250ZW50QWxpZ25lciB7CitwdWJsaWM6CisgICAgTGluZUNvbnRlbnRBbGlnbmVyKGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgTGluZUJveCYsIExpbmVCdWlsZGVyOjpSdW5M
aXN0JiwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CisKKyAgICBlbnVtIGNsYXNz
IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIGFsaWdu
SG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7
CisgICAgdm9pZCBhbGlnblZlcnRpY2FsbHkoKTsKKyAgICB2b2lkIGFkanVzdEJhc2VsaW5lQW5k
TGluZUhlaWdodCgpOworCitwcml2YXRlOgorICAgIHZvaWQganVzdGlmeVJ1bnMoSW5saW5lTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CisgICAgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhhbmdp
bmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7CisgICAgSW5saW5l
TGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mKSBjb25z
dDsKKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAgICBMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgp
LmxheW91dFN0YXRlKCk7IH0KKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBt
X2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworICAgIExpbmVCb3gmIG1fbGluZUJveDsKKyAgICBM
aW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOworICAgIElubGluZUxheW91dFVuaXQgbV9hdmFp
bGFibGVXaWR0aDsKK307CisKK0xpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGlnbmVy
KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwg
TGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElubGluZUxheW91
dFVuaXQgYXZhaWxhYmxlV2lkdGgpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlu
bGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwgbV9saW5lQm94KGxpbmVCb3gpCisgICAgLCBt
X3J1bnMocnVucykKKyAgICAsIG1fYXZhaWxhYmxlV2lkdGgoYXZhaWxhYmxlV2lkdGgpCit7Cit9
CisKK3ZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250YWxseShUZXh0QWxpZ25N
b2RlIGhvcml6b250YWxBbGlnbm1lbnQsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lKQoreworICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0NvbnRl
bnQoaXNMYXN0TGluZSk7CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IG1fYXZhaWxhYmxlV2lk
dGggKyBoYW5naW5nQ29udGVudC53aWR0aCgpOworICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8
IGF2YWlsYWJsZVdpZHRoIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChob3Jpem9u
dGFsQWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKKyAgICAgICAganVzdGlm
eVJ1bnMoYXZhaWxhYmxlV2lkdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBhZGp1c3RtZW50Rm9yQWxpZ25tZW50ID0gWyZdIChhdXRvIGF2YWlsYWJsZVdpZHRoKSAtPiBP
cHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7CisgICAgICAgIHN3aXRjaCAoaG9yaXpvbnRhbEFs
aWdubWVudCkgeworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpTdGFydDoKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Cisg
ICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoLCAwKTsKKyAgICAgICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0
Q2VudGVyOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2
YWlsYWJsZVdpZHRoIC8gMiwgMCk7CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlm
eToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfTsKKworICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGln
bm1lbnQoYXZhaWxhYmxlV2lkdGgpOworICAgIGlmICghYWRqdXN0bWVudCkKKyAgICAgICAgcmV0
dXJuOworICAgIC8vIEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9ubHkg
YWRqdXN0IHRoZSBydW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGxpbmUg
Ym94IGlzIGFsaWduZWQgYXMgd2VsbAorICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1hbGln
bjogY2VudGVyOyB3aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxpbmUg
Ym94IHdpbGwgYWxzbyBiZSBjZW50ZXJlZAorICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQgYXQg
MHB4IGFsbCB0aGUgd2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgorICAg
IG1fbGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKKyAgICBmb3IgKGF1dG8m
IHJ1biA6IG1fcnVucykKKyAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQp
OworfQorCit2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5KCkKK3sKKyAg
ICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QgPSBtX2xpbmVCb3gubG9naWNhbFJlY3QoKTsK
KyAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICBhdXRvIGxvZ2ljYWxUb3Ag
PSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxh
eW91dEJveCgpOworICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUo
KS52ZXJ0aWNhbEFsaWduKCk7CisgICAgICAgIGF1dG8gYXNjZW50ID0gbGF5b3V0Qm94LnN0eWxl
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKworICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxp
Z24pIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZToKKyAgICAgICAgICAg
IGlmIChydW4uaXNMaW5lQnJlYWsoKSB8fCBydW4uaXNUZXh0KCkpCisgICAgICAgICAgICAgICAg
bG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50OworICAg
ICAgICAgICAgZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJv
eChsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxp
Z25tZW50QmFzZWxpbmUoKSAtIGFzY2VudCAtIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpIC0gYm94
R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRp
bmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUo
ZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAgICAgICAgICAvLyBT
cGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVt
cHR5LgorICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGZvcm1hdHRp
bmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpLmJhc2VsaW5l
KCk7CisgICAgICAgICAgICAgICAgLy8gVGhlIGlubGluZS1ibG9jaydzIGJhc2VsaW5lIG9mZnNl
dCBpcyByZWxhdGl2ZSB0byBpdHMgY29udGVudCBib3guIExldCdzIGNvbnZlcnQgaXQgcmVsYXRp
dmUgdG8gdGhlIG1hcmdpbiBib3guCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIF9fX19f
X19fX19fX19fXyA8LSBtYXJnaW4gYm94CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfAor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgIF9fX19fX19fX19fXyAgPC0gYm9yZGVyIGJv
eAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfAorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgIHwgfCAgX19fX19fX19fICA8LSBjb250ZW50IGJveAorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgIHwgfCB8ICAgXgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAg
fCAgPC0gYmFzZWxpbmUgb2Zmc2V0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwg
ICB8CisgICAgICAgICAgICAgICAgLy8gICAgIHRleHQgfCB8IHwgICB2IHRleHQKKyAgICAgICAg
ICAgICAgICAvLyAgICAgLS0tLS18LXwtfC0tLS0tLS0tLS0gPC0gYmFzZWxpbmUKKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgIGF1
dG8gYmFzZWxpbmVGcm9tTWFyZ2luQm94ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBi
b3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9y
KDApICsgaW5saW5lQmxvY2tCYXNlbGluZTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
bV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSBiYXNlbGluZUZyb21NYXJnaW5Cb3g7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0g
Zm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hH
ZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCku
dmFsdWVPcigwX2x1KSArIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpICsgYm94R2VvbWV0cnku
bWFyZ2luQWZ0ZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CisgICAgICAgICAgICBsb2dpY2FsVG9wID0gMF9s
dTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRv
bToKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gubG9naWNhbEJvdHRvbSgpIC0g
cnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBydW4uYWRqdXN0TG9naWNhbFRvcChs
b2dpY2FsVG9wKTsKKyAgICAgICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhl
IHJ1biBvdmVyZmxvd3MgdGhlIGxpbmUuCisgICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3Qu
ZXhwYW5kVmVydGljYWxseVRvQ29udGFpbihydW4ubG9naWNhbFJlY3QoKSk7CisgICAgICAgIC8v
IENvbnZlcnQgcnVucyBmcm9tIHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0IHRvIHRoZSBm
b3JtYXR0aW5nIHJvb3QncyBib3JkZXIgYm94IHRvcC9sZWZ0LgorICAgICAgICBydW4ubW92ZVZl
cnRpY2FsbHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIHJ1bi5tb3ZlSG9yaXpv
bnRhbGx5KG1fbGluZUJveC5sb2dpY2FsTGVmdCgpKTsKKyAgICB9CisgICAgbV9saW5lQm94LnNl
dFNjcm9sbGFibGVPdmVyZmxvdyhzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0KTsKK30KKwordm9pZCBM
aW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgpCit7CisgICAgQVNTRVJUKGF2YWlsYWJsZVdpZHRoID4gMCk7CisgICAgLy8gQ29sbGVj
dCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51bWJlcnMgYW5kIGZpbmQgdGhlIGxhc3QgcnVu
IHdpdGggY29udGVudC4KKyAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwor
ICAgIExpbmVCdWlsZGVyOjpSdW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7CisgICAg
Zm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudCArPSBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOworICAgICAgICBpZiAocnVu
LmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQorICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50
ID0gJnJ1bjsKKyAgICB9CisgICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxhc3QgcnVuJ3MgdHJh
aWxpbmcgZXhwYW5zaW9uLgorICAgIGlmIChsYXN0UnVuV2l0aENvbnRlbnQgJiYgbGFzdFJ1bldp
dGhDb250ZW50LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7CisgICAgICAgIC8vIFR1cm4g
b2ZmIHRoZSB0cmFpbGluZyBiaXRzIGZpcnN0IGFuZCBhZGQgdGhlIGZvcmJpZCB0cmFpbGluZyBl
eHBhbnNpb24uCisgICAgICAgIGF1dG8gbGVmdEV4cGFuc2lvbiA9IGxhc3RSdW5XaXRoQ29udGVu
dC0+ZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrOworICAgICAgICBsYXN0
UnVuV2l0aENvbnRlbnQtPnNldEV4cGFuc2lvbkJlaGF2aW9yKGxlZnRFeHBhbnNpb24gfCBGb3Ji
aWRSaWdodEV4cGFuc2lvbik7CisgICAgfQorICAgIC8vIE5vdGhpbmcgdG8gZGlzdHJpYnV0ZT8K
KyAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCisgICAgICAgIHJldHVybjsKKyAg
ICAvLyBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZS4KKyAgICBhdXRvIGV4cGFuc2lvblRvRGlz
dHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKKyAg
ICBJbmxpbmVMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKKyAgICBmb3IgKGF1
dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICAvLyBFeHBhbmQgYW5kIG1vdmVzIHJ1bnMgYnkg
dGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KKyAgICAgICAgaWYgKCFydW4uaGFzRXhwYW5zaW9u
T3Bwb3J0dW5pdHkoKSkgeworICAgICAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11
bGF0ZWRFeHBhbnNpb24pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOworICAgICAgICBhdXRv
IGNvbXB1dGVkRXhwYW5zaW9uID0gZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQoKTsKKyAgICAgICAgcnVuLnNldENvbXB1dGVkSG9yaXpvbnRhbEV4
cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7CisgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5
KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKyAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0g
Y29tcHV0ZWRFeHBhbnNpb247CisgICAgfQorfQorCit2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6
YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKK3sKKyAgICB1bnNpZ25lZCBpbmxpbmVDb250
YWluZXJOZXN0aW5nTGV2ZWwgPSAwOworICAgIGF1dG8gaGFzU2VlbkRpcmVjdFRleHRPckxpbmVC
cmVhayA9IGZhbHNlOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgIGF1
dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICAgICAgYXV0byYgc3R5bGUgPSBs
YXlvdXRCb3guc3R5bGUoKTsKKworICAgICAgICBydW4uc2V0TG9naWNhbEhlaWdodChydW5Db250
ZW50SGVpZ2h0KHJ1bikpOworCisgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGlu
ZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwp
IHsKKyAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGFkanVzdGVkIHRoZSBsaW5lIGhl
aWdodC9iYXNlbGluZSB0aHJvdWdoIHRoZSBwYXJlbnQgaW5saW5lIGNvbnRhaW5lci4gCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGFz
U2VlbkRpcmVjdFRleHRPckxpbmVCcmVhaykgeworICAgICAgICAgICAgICAgIC8vIGUuZyBkaXY+
Zmlyc3QgdGV4dDwvZGl2PiBvciA8ZGl2PjxzcGFuPm5lc3RlZDxzcGFuPmZpcnN0IGRpcmVjdCB0
ZXh0PC9kaXY+LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhayA9IHRydWU7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydW4uaXNDb250YWluZXJTdGFy
dCgpKSB7CisgICAgICAgICAgICArK2lubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKKyAgICAg
ICAgICAgIC8vIElubGluZSBjb250YWluZXJzIHN0cmV0Y2ggdGhlIGxpbmUgYnkgdGhlaXIgZm9u
dCBzaXplLgorICAgICAgICAgICAgLy8gVmVydGljYWwgbWFyZ2lucywgcGFkZGluZ3MgYW5kIGJv
cmRlcnMgZG9uJ3QgY29udHJpYnV0ZSB0byB0aGUgbGluZSBoZWlnaHQuCisgICAgICAgICAgICBh
dXRvJiBmb250TWV0cmljcyA9IHN0eWxlLmZvbnRNZXRyaWNzKCk7CisgICAgICAgICAgICBpZiAo
c3R5bGUudmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKSB7CisgICAg
ICAgICAgICAgICAgYXV0byBoYWxmTGVhZGluZyA9IExpbmVCdWlsZGVyOjpoYWxmTGVhZGluZ01l
dHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAg
ICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2VudCBjb3VsZCBiZSBu
ZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1ZSkKKyAgICAgICAg
ICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCisgICAgICAgICAgICAgICAgICAg
IG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRlc2NlbnQpOworICAg
ICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQgPiAwKQorICAgICAgICAgICAgICAg
ICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmFzY2VudCk7Cisg
ICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobV9saW5l
Qm94LmFzY2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihmb250TWV0
cmljcy5oZWlnaHQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChydW4uaXNDb250YWluZXJFbmQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGxpbmUn
cyBiYXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVzdGVkIGF0IENvbnRh
aW5lclN0YXJ0LgorICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZl
bCk7CisgICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7Cisg
ICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0
cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0g
Ym94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoc3R5
bGUudmVydGljYWxBbGlnbigpKSB7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJh
c2VsaW5lOiB7CisgICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94
KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5saW5lIGNvbnRlbnQg
YWx3YXlzIGhhdmUgYmFzZWxpbmVzLgorICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0
aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRl
KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0
eS4KKyAgICAgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBmb3JtYXR0aW5nU3Rh
dGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSAr
IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVl
T3IoMCk7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGlu
ZUlmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2lu
Qm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUgKGluY2x1ZGlu
ZyB0aGVpciBib3R0b20gbWFyZ2luKS4KKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNl
dEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAv
LyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50IGlzIGEgdGhp
bmcpLgorICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PigwLCBtX2xp
bmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFZl
cnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVudCBu
ZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBvZiB0
aGUgbGluZSBmdXJ0aGVyIGRvd24uCisgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2lj
YWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7CisgICAgICAgICAg
ICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMgdGhlIGJhc2VsaW5l
IGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KKyAgICAgICAgICAgICAgICBhdXRvIGxp
bmVMb2dpY2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94
SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFsaWdubWVudEJhc2Vs
aW5lSWZHcmVhdGVyKG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpICsgKG1hcmdpbkJveEhl
aWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK0hhbmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhh
bmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IEhhbmdpbmdD
b250ZW50IHsgfTsKKyAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJ
c0NvbmRpdGlvbmFsKCk7CisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJh
bmdlKG1fcnVucykpIHsKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVu
LmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1
bi5pc0xpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRp
dGlvbmFsKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAg
ICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFw
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFs
IG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBo
YW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOworICAg
IH0KKyAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Cit9CisKK0lubGluZUxheW91dFVuaXQgTGlu
ZUNvbnRlbnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4m
IHJ1bikgY29uc3QKK3sKKyAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCk7CisgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkKKyAg
ICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgaWYgKHJ1bi5pc0NvbnRh
aW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgIHJldHVybiBmb250
TWV0cmljcy5oZWlnaHQoKTsKKworICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3go
KTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKKyAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuIGJveEdlb21l
dHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKKworICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94
IChlLmcuIGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRoZWly
IG1hcmdpbiBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KKyAgICBy
ZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Cit9CisKIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGlu
dmFsaWRhdGlvblN0YXRlLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmIGNvbnN0
cmFpbnRzKQogewogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwg
c3RyZWFtIDw8ICJbU3RhcnRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4gZm9ybWF0
dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwpAQCAtMTM5LDcgKzQ2Niw3IEBAIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0
ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0Nv
bnRlbnRMZW5ndGg7CiAgICAgfTsKICAgICBPcHRpb25hbDxQcmV2aW91c0xpbmU+IHByZXZpb3Vz
TGluZTsKLSAgICBhdXRvIGxpbmUgPSBMaW5lQnVpbGRlciB7ICp0aGlzLCByb290KCkuc3R5bGUo
KS50ZXh0QWxpZ24oKSwgTGluZUJ1aWxkZXI6OkludHJpbnNpY1NpemluZzo6Tm8gfTsKKyAgICBh
dXRvIGxpbmUgPSBMaW5lQnVpbGRlciB7ICp0aGlzIH07CiAgICAgYXV0byBsaW5lTGF5b3V0Q29u
dGV4dCA9IExpbmVMYXlvdXRDb250ZXh0IHsgKnRoaXMsIHJvb3QoKSwgaW5saW5lSXRlbXMgfTsK
IAogICAgIHdoaWxlICghbmVlZHNMYXlvdXRSYW5nZS5pc0VtcHR5KCkpIHsKQEAgLTE0OCw5ICs0
NzUsNTUgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJ
dGVtcyYgaW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgLy8gInNwWzwtbGluZSBi
cmVhay0+XWxpdF9jb250ZW50IiAtPiBvdmVyZmxvdyBsZW5ndGg6IDExIC0+IGxlYWRpbmcgcGFy
dGlhbCBjb250ZW50IGxlbmd0aDogMTEuCiAgICAgICAgIGF1dG8gcGFydGlhbExlYWRpbmdDb250
ZW50TGVuZ3RoID0gcHJldmlvdXNMaW5lID8gcHJldmlvdXNMaW5lLT5vdmVyZmxvd0NvbnRlbnRM
ZW5ndGggOiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lTGF5
b3V0Q29udGV4dC5sYXlvdXRJbmxpbmVDb250ZW50KGxpbmUsIG5lZWRzTGF5b3V0UmFuZ2UsIHBh
cnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCk7CisgICAgICAgIGF1dG8mIGxpbmVCb3ggPSBsaW5l
LmxpbmVCb3goKTsKKyAgICAgICAgYXV0byBsaW5lQ29udGVudFJhbmdlID0gbGluZUNvbnRlbnQu
aW5saW5lSXRlbVJhbmdlOworCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBh
bmQgd2lsbCBldmVudHVhbGx5IGdldCBtZXJnZWQgdG8gTGluZUJveC4KKyAgICAgICAgYXV0byBh
bGlnbkxpbmVDb250ZW50ID0gWyZdIHsKKyAgICAgICAgICAgIGF1dG8gY29udGVudEFsaWduZXIg
PSBMaW5lQ29udGVudEFsaWduZXIgeyAqdGhpcywgbGluZUJveCwgbGluZS5ydW5zKCksIGxpbmUu
YXZhaWxhYmxlV2lkdGgoKSB9OworICAgICAgICAgICAgY29udGVudEFsaWduZXIuYWRqdXN0QmFz
ZWxpbmVBbmRMaW5lSGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAobGluZS5pc1Zpc3VhbGx5RW1w
dHkoKSkgeworICAgICAgICAgICAgICAgIGxpbmVCb3gucmVzZXRBbGlnbm1lbnRCYXNlbGluZSgp
OworICAgICAgICAgICAgICAgIGxpbmVCb3guc2V0TG9naWNhbEhlaWdodCh7IH0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gUmVtb3ZlIGRlc2NlbnQgd2hlbiBhbGwgY29udGVudCBp
cyBiYXNlbGluZSBhbGlnbmVkIGJ1dCBub25lIG9mIHRoZW0gaGF2ZSBkZXNjZW50LgorICAgICAg
ICAgICAgaWYgKHF1aXJrcygpLmxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKGxpbmUucnVucygp
KSkgeworICAgICAgICAgICAgICAgIGxpbmVCb3guc2hyaW5rVmVydGljYWxseShsaW5lQm94LmFz
Y2VudEFuZERlc2NlbnQoKS5kZXNjZW50KTsKKyAgICAgICAgICAgICAgICBsaW5lQm94LnJlc2V0
RGVzY2VudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGVudEFsaWduZXIuYWxp
Z25WZXJ0aWNhbGx5KCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50ID0gWyZdIHsKKyAgICAgICAgICAgICAgICBpZiAobGluZUNvbnRlbnRSYW5nZS5lbmQg
PT0gbmVlZHNMYXlvdXRSYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5l
Q29udGVudEFsaWduZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzOworICAgICAg
ICAgICAgICAgIGlmIChsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50OjpObzsKKyAgICAgICAgICAgICAgICAvLyBPbWl0IGZsb2F0cyB0byBzZWUgaWYgdGhpcyBp
cyB0aGUgbGFzdCBsaW5lIHdpdGggaW5saW5lIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgZm9y
IChhdXRvIGkgPSBsaW5lQ29udGVudFJhbmdlLmVuZDsgaS0tOykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlubGluZUl0ZW1zW2ldLmlzRmxvYXQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBpID09IGxpbmVDb250ZW50UmFuZ2UuZW5kIC0gMSA/IExpbmVDb250ZW50QWxp
Z25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQ29udGVudEFsaWdu
ZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZsb2F0
IGl0ZW0uCisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50OjpObzsKKyAgICAgICAgICAgIH0oKTsKKworICAgICAgICAgICAgYXV0byBjb21wdXRlZEhv
cml6b250YWxBbGlnbm1lbnQgPSBbJl0geworICAgICAgICAgICAgICAgIGlmIChyb290KCkuc3R5
bGUoKS50ZXh0QWxpZ24oKSAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCk7CisgICAgICAgICAgICAg
ICAgLy8gVGV4dCBpcyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVk
IGJ5IHRoZSB0ZXh0LWp1c3RpZnkgcHJvcGVydHksCisgICAgICAgICAgICAgICAgLy8gaW4gb3Jk
ZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZp
ZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAorICAgICAgICAgICAgICAgIC8vIHRoZSBsYXN0IGxpbmUg
YmVmb3JlIGEgZm9yY2VkIGJyZWFrIG9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrIGlzIHN0YXJ0LWFs
aWduZWQuCisgICAgICAgICAgICAgICAgaWYgKGxpbmUucnVucygpLmxhc3QoKS5pc0xpbmVCcmVh
aygpIHx8IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9PSBMaW5lQ29udGVudEFsaWduZXI6
OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRB
bGlnbk1vZGU6Okp1c3RpZnk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29udGVudEFs
aWduZXIuYWxpZ25Ib3Jpem9udGFsbHkoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50KCksIGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgICAgIH07CisKKyAgICAgICAgYWxpZ25M
aW5lQ29udGVudCgpOwogICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxpbmUsIGxpbmVD
b250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKIAotICAgICAgICBhdXRvIGxpbmVDb250
ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtczsKICAgICAgICAgaWYgKCFsaW5lQ29u
dGVudFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG5lZWRzTGF5b3V0UmFu
Z2Uuc3RhcnQgPCBsaW5lQ29udGVudFJhbmdlLmVuZCk7CiAgICAgICAgICAgICBsaW5lTG9naWNh
bFRvcCA9IGxpbmUubGluZUJveCgpLmxvZ2ljYWxCb3R0b20oKTsKQEAgLTI0OCwxNCArNjIxLDE0
IEBAIElubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50
cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KEluCiB7CiAgICAgYXV0byYgaW5saW5lSXRlbXMgPSBm
b3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpOwogICAgIGF1dG8gbWF4aW11bUxpbmVXaWR0
aCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgIGF1dG8gbGluZSA9IExpbmVCdWlsZGVyIHsg
KnRoaXMsIHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpLCBMaW5lQnVpbGRlcjo6SW50cmluc2lj
U2l6aW5nOjpZZXMgfTsKKyAgICBhdXRvIGxpbmUgPSBMaW5lQnVpbGRlciB7ICp0aGlzIH07CiAg
ICAgYXV0byBsaW5lTGF5b3V0Q29udGV4dCA9IExpbmVMYXlvdXRDb250ZXh0IHsgKnRoaXMsIHJv
b3QoKSwgaW5saW5lSXRlbXMgfTsKICAgICBhdXRvIGxheW91dFJhbmdlID0gTGluZUxheW91dENv
bnRleHQ6OklubGluZUl0ZW1SYW5nZSB7IDAgLCBpbmxpbmVJdGVtcy5zaXplKCkgfTsKICAgICB3
aGlsZSAoIWxheW91dFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBPbmx5IHRoZSBob3Jp
enRvbmFsIGF2YWlsYWJsZSB3aWR0aCBpcyBjb25zdHJhaW5lZCB3aGVuIGNvbXB1dGluZyBpbnRy
aW5zaWMgd2lkdGguCiAgICAgICAgIGxpbmUuaW5pdGlhbGl6ZShMaW5lQnVpbGRlcjo6Q29uc3Ry
YWludHMgeyB7IH0sIGF2YWlsYWJsZVdpZHRoLCB7IH0sIGZhbHNlIH0pOwogICAgICAgICBhdXRv
IGxpbmVDb250ZW50ID0gbGluZUxheW91dENvbnRleHQubGF5b3V0SW5saW5lQ29udGVudChsaW5l
LCBsYXlvdXRSYW5nZSwgeyB9KTsKLSAgICAgICAgbGF5b3V0UmFuZ2Uuc3RhcnQgPSBsaW5lQ29u
dGVudC5pbmxpbmVJdGVtcy5lbmQ7CisgICAgICAgIGxheW91dFJhbmdlLnN0YXJ0ID0gbGluZUNv
bnRlbnQuaW5saW5lSXRlbVJhbmdlLmVuZDsKICAgICAgICAgLy8gRklYTUU6IFVzZSBsaW5lIGxv
Z2ljYWwgbGVmdCBhbmQgcmlnaHQgdG8gdGFrZSBmbG9hdHMgaW50byBhY2NvdW50LgogICAgICAg
ICBtYXhpbXVtTGluZVdpZHRoID0gc3RkOjptYXgobWF4aW11bUxpbmVXaWR0aCwgbGluZS5saW5l
Qm94KCkubG9naWNhbFdpZHRoKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5oCmluZGV4IDFkYjBmYzRkY2Y2NGJhNjRkZTVlMzMxNWU0MzM3YmVjMTRmOGNlZGMuLjM2NDQ1
NDdiMzBlNGVkNDEzODEzZmFjMWZhYTQyZGYyNTE4YWU2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaApAQCAtOTMsOCArOTMsNiBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgSW5s
aW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5n
U3RhdGUoKSk7IH0KICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgp
IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRl
eHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQotICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSBz
dHJ1Y3R1cmUgdGhhdCByZXF1aXJlcyBubyBmcmllbmRpbmcuCi0gICAgZnJpZW5kIGNsYXNzIExp
bmVCdWlsZGVyOwogfTsKIAogaW5saW5lIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6R2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IGU1Yzc5OTZjNjFjNTBjYWM2
ODI1ZDg5OGRlMDFlOTNhYjQzNmVhZDUuLjZmM2Y0ZTJlNWExN2U4YjVjYWUyZjU5ZWFjYjc5MGE0
OWYwYjBhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTQzLDMzNyArNDMsOSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlUHJlc2VydmVkKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKICAgICByZXR1cm4gd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpQcmUgfHwgd2hp
dGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpQcmVXcmFwIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFj
ZTo6QnJlYWtTcGFjZXM7CiB9CiAKLXN0cnVjdCBIYW5naW5nQ29udGVudCB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCByZXNldCgpOwotCi0gICAgSW5saW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGg7IH0KLSAgICBib29sIGlzQ29uZGl0aW9uYWwoKSBjb25zdCB7IHJldHVy
biBtX2lzQ29uZGl0aW9uYWw7IH0KLQotICAgIHZvaWQgc2V0SXNDb25kaXRpb25hbCgpIHsgbV9p
c0NvbmRpdGlvbmFsID0gdHJ1ZTsgfQotICAgIHZvaWQgZXhwYW5kKElubGluZUxheW91dFVuaXQg
d2lkdGgpIHsgbV93aWR0aCArPSB3aWR0aDsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0Nv
bmRpdGlvbmFsIHsgZmFsc2UgfTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fd2lkdGggeyAwIH07
Ci19OwotCi12b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgpCi17Ci0gICAgbV9pc0NvbmRpdGlv
bmFsID0gZmFsc2U7Ci0gICAgbV93aWR0aCA9ICAwOwotfQotCi1jbGFzcyBMaW5lQ29udGVudEFs
aWduZXIgewotcHVibGljOgotICAgIExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYsIExpbmVCb3gmLCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwotCi0gICAgdm9pZCBhbGlnbkhvcml6b250YWxseShU
ZXh0QWxpZ25Nb2RlLCBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsK
LSAgICB2b2lkIGFsaWduVmVydGljYWxseSgpOwotICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRM
aW5lSGVpZ2h0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVMYXlv
dXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKLSAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2lu
Z0NvbnRlbnQoTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVy
OjpSdW4mKSBjb25zdDsKLQotICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3Jt
YXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7
IH0KLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0
aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KLQotICAgIGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwotICAgIExpbmVCb3gmIG1fbGlu
ZUJveDsKLSAgICBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOwotICAgIElubGluZUxheW91
dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKLX07Ci0KLUxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNv
bnRlbnRBbGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMs
IElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCi0gICAgOiBtX2lubGluZUZvcm1hdHRp
bmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9saW5lQm94KGxpbmVC
b3gpCi0gICAgLCBtX3J1bnMocnVucykKLSAgICAsIG1fYXZhaWxhYmxlV2lkdGgoYXZhaWxhYmxl
V2lkdGgpCi17Ci19Ci0KLXZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250YWxs
eShUZXh0QWxpZ25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIExpbmVCdWlsZGVyOjpJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGhhbmdpbmdDb250
ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmUpOwotICAgIGF1dG8gYXZhaWxh
YmxlV2lkdGggPSBtX2F2YWlsYWJsZVdpZHRoICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsKLSAg
ICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoaG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5KSB7Ci0gICAgICAgIGp1c3RpZnlSdW5zKGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gYWRqdXN0bWVudEZvckFsaWdubWVudCA9IFsmXSAo
YXV0byBhdmFpbGFibGVXaWR0aCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gewotICAg
ICAgICBzd2l0Y2ggKGhvcml6b250YWxBbGlnbm1lbnQpIHsKLSAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0g
ICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgICAgICByZXR1cm4geyB9
OwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVX
aWR0aCwgMCk7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgICAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCAvIDIsIDApOwotICAgICAgICBj
YXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH07Ci0KLSAgICBhdXRvIGFkanVz
dG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2YWlsYWJsZVdpZHRoKTsKLSAgICBpZiAo
IWFkanVzdG1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBIb3Jpem9udGFsIGFsaWdubWVu
dCBtZWFucyB0aGF0IHdlIG5vdCBvbmx5IGFkanVzdCB0aGUgcnVucyBidXQgYWxzbyBtYWtlIHN1
cmUKLSAgICAvLyB0aGF0IHRoZSBsaW5lIGJveCBpcyBhbGlnbmVkIGFzIHdlbGwKLSAgICAvLyBl
LmcuIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgd2lkdGg6IDEwMHB4OyI+Y2VudGVy
ZWQgdGV4dDwvZGl2PiA6IHRoZSBsaW5lIGJveCB3aWxsIGFsc28gYmUgY2VudGVyZWQKLSAgICAv
LyBhcyBvcHBvc2VkIHRvIHN0YXJ0IGF0IDBweCBhbGwgdGhlIHdheSB0byBbY2VudGVyZWQgdGV4
dF0gcnVuJ3MgcmlnaHQgZWRnZS4KLSAgICBtX2xpbmVCb3gubW92ZUhvcml6b250YWxseSgqYWRq
dXN0bWVudCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpCi0gICAgICAgIHJ1bi5tb3Zl
SG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLX0KLQotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6
OmFsaWduVmVydGljYWxseSgpCi17Ci0gICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0ID0g
bV9saW5lQm94LmxvZ2ljYWxSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsK
LSAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAg
IGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byB2ZXJ0aWNh
bEFsaWduID0gbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwotICAgICAgICBhdXRv
IGFzY2VudCA9IGxheW91dEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7Ci0KLSAg
ICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWduKSB7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6QmFzZWxpbmU6Ci0gICAgICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkgfHwgcnVuLmlz
VGV4dCgpKQotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50
QmFzZWxpbmUoKSAtIGFzY2VudDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5l
clN0YXJ0KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBs
b2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSBhc2NlbnQgLSBib3hH
ZW9tZXRyeS5ib3JkZXJUb3AoKSAtIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYm
IGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlz
aGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94
KSk7Ci0gICAgICAgICAgICAgICAgLy8gU3BlYyBtYWtlcyB1cyBnZW5lcmF0ZSBhdCBsZWFzdCBv
bmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICBhdXRvIGlubGlu
ZUJsb2NrQmFzZWxpbmUgPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+
bGluZUJveGVzLmxhc3QoKS5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgIC8vIFRoZSBpbmxp
bmUtYmxvY2sncyBiYXNlbGluZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gaXRzIGNvbnRlbnQgYm94
LiBMZXQncyBjb252ZXJ0IGl0IHJlbGF0aXZlIHRvIHRoZSBtYXJnaW4gYm94LgotICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICBfX19fX19fX19fX19fX18gPC0gbWFyZ2luIGJveAotICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8ICBf
X19fX19fX19fX18gIDwtIGJvcmRlciBib3gKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8
IHwKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwgIF9fX19fX19fXyAgPC0gY29udGVu
dCBib3gKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIF4KLSAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICB8IHwgfCAgIHwgIDwtIGJhc2VsaW5lIG9mZnNldAotICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAgfAotICAgICAgICAgICAgICAgIC8vICAgICB0ZXh0
IHwgfCB8ICAgdiB0ZXh0Ci0gICAgICAgICAgICAgICAgLy8gICAgIC0tLS0tfC18LXwtLS0tLS0t
LS0tIDwtIGJhc2VsaW5lCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KTsKLSAgICAgICAgICAgICAgICBhdXRvIGJhc2VsaW5lRnJvbU1hcmdpbkJveCA9IGJveEdl
b21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9t
ZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7Ci0gICAg
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0g
YmFzZWxpbmVGcm9tTWFyZ2luQm94OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFs
aWdubWVudEJhc2VsaW5lKCkgLSAoYm94R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGJveEdl
b21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMF9sdSkgKyBydW4ubG9naWNhbFJlY3Qo
KS5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IDBfbHU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9s
aW5lQm94LmxvZ2ljYWxCb3R0b20oKSAtIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgcnVuLmFkanVzdExvZ2ljYWxUb3AobG9naWNhbFRvcCk7Ci0gICAgICAgIC8vIEFkanVzdCBz
Y3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBydW4gb3ZlcmZsb3dzIHRoZSBsaW5lLgotICAgICAg
ICBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuLmxv
Z2ljYWxSZWN0KCkpOwotICAgICAgICAvLyBDb252ZXJ0IHJ1bnMgZnJvbSByZWxhdGl2ZSB0byB0
aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290J3MgYm9yZGVyIGJveCB0b3Av
bGVmdC4KLSAgICAgICAgcnVuLm1vdmVWZXJ0aWNhbGx5KG1fbGluZUJveC5sb2dpY2FsVG9wKCkp
OwotICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShtX2xpbmVCb3gubG9naWNhbExlZnQoKSk7
Ci0gICAgfQotICAgIG1fbGluZUJveC5zZXRTY3JvbGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92
ZXJmbG93UmVjdCk7Ci19Ci0KLXZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyhJ
bmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQotewotICAgIEFTU0VSVChhdmFpbGFibGVX
aWR0aCA+IDApOwotICAgIC8vIENvbGxlY3QgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0eSBudW1i
ZXJzIGFuZCBmaW5kIHRoZSBsYXN0IHJ1biB3aXRoIGNvbnRlbnQuCi0gICAgYXV0byBleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50ID0gMDsKLSAgICBMaW5lQnVpbGRlcjo6UnVuKiBsYXN0UnVuV2l0
aENvbnRlbnQgPSBudWxscHRyOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAg
ICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQoKTsKLSAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSkKLSAgICAg
ICAgICAgIGxhc3RSdW5XaXRoQ29udGVudCA9ICZydW47Ci0gICAgfQotICAgIC8vIE5lZWQgdG8g
Zml4IHVwIHRoZSBsYXN0IHJ1bidzIHRyYWlsaW5nIGV4cGFuc2lvbi4KLSAgICBpZiAobGFzdFJ1
bldpdGhDb250ZW50ICYmIGxhc3RSdW5XaXRoQ29udGVudC0+aGFzRXhwYW5zaW9uT3Bwb3J0dW5p
dHkoKSkgewotICAgICAgICAvLyBUdXJuIG9mZiB0aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBhbmQg
YWRkIHRoZSBmb3JiaWQgdHJhaWxpbmcgZXhwYW5zaW9uLgotICAgICAgICBhdXRvIGxlZnRFeHBh
bnNpb24gPSBsYXN0UnVuV2l0aENvbnRlbnQtPmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWZ0RXhw
YW5zaW9uTWFzazsKLSAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50LT5zZXRFeHBhbnNpb25CZWhh
dmlvcihsZWZ0RXhwYW5zaW9uIHwgRm9yYmlkUmlnaHRFeHBhbnNpb24pOwotICAgIH0KLSAgICAv
LyBOb3RoaW5nIHRvIGRpc3RyaWJ1dGU/Ci0gICAgaWYgKCFleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2Uu
Ci0gICAgYXV0byBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCAvIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQ7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBhY2N1bXVsYXRlZEV4
cGFuc2lvbiA9IDA7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgLy8g
RXhwYW5kIGFuZCBtb3ZlcyBydW5zIGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBhbnNpb24uCi0gICAg
ICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKLSAgICAgICAgICAgIHJ1
bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChydW4uZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudCgpKTsKLSAgICAgICAgYXV0byBjb21wdXRlZEV4cGFuc2lvbiA9IGV4cGFuc2lvblRv
RGlzdHJpYnV0ZSAqIHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7Ci0gICAgICAgIHJ1
bi5zZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24oY29tcHV0ZWRFeHBhbnNpb24pOwotICAg
ICAgICBydW4ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAg
IGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGNvbXB1dGVkRXhwYW5zaW9uOwotICAgIH0KLX0KLQot
dm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpCi17
Ci0gICAgdW5zaWduZWQgaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKLSAgICBhdXRv
IGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIHJ1
biA6IG1fcnVucykgewotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7
Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0KLSAgICAgICAgcnVu
LnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKLQotICAgICAgICBpZiAo
cnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBpZiAoaW5s
aW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgYWxy
ZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50
IGlubGluZSBjb250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKLSAg
ICAgICAgICAgICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5u
ZXN0ZWQ8c3Bhbj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5l
QnJlYWsgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250
YWluZXJOZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJl
dGNoIHRoZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2Fs
IG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxp
bmUgaGVpZ2h0LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0
cmljcygpOwotICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNh
bEFsaWduOjpCYXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBM
aW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBzdHlsZS5jb21wdXRl
ZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gQm90aCBoYWxmbGVhZGluZyBhc2Nl
bnQgYW5kIGRlc2NlbnQgY291bGQgYmUgbmVnYXRpdmUgKHRhbGwgZm9udCB2cy4gc21hbGwgbGlu
ZS1oZWlnaHQgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlc2NlbnQg
PiAwKQotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlciho
YWxmTGVhZGluZy5kZXNjZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuYXNj
ZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2VudElmR3JlYXRl
cihoYWxmTGVhZGluZy5hc2NlbnQpOwotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0SWZHcmVhdGVyKG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuaGVpZ2h0KCkp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2lj
YWxIZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsK
LSAgICAgICAgICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZlIGFscmVh
ZHkgYmVlbiBhZGp1c3RlZCBhdCBDb250YWluZXJTdGFydC4KLSAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpOwotICAgICAgICAgICAgLS1pbmxpbmVDb250YWlu
ZXJOZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChydW4uaXNCb3goKSkgewotICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAg
ICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwot
Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSkgewotICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAgICAgICAgIGlmIChs
YXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW5saW5lLWJs
b2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZlIGJhc2VsaW5lcy4KLSAgICAgICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25l
IGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGxh
c3RMaW5lQm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVC
b3hlcy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYmVmb3JlSGVpZ2h0ID0gYm94
R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdl
b21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAgICAgICAgICAgICAgICBtX2xp
bmVCb3guc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYmVmb3JlSGVpZ2h0ICsgbGFzdExp
bmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTm9uIGlubGluZS1ibG9jayBib3hlcyBzaXQg
b24gdGhlIGJhc2VsaW5lIChpbmNsdWRpbmcgdGhlaXIgYm90dG9tIG1hcmdpbikuCi0gICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0
KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZlIGRlc2NlbnQgKHllcywg
bmVnYXRpdmUgZGVzY2VudCBpcyBhIHRoaW5nKS4KLSAgICAgICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0ICsgc3RkOjptYXg8
SW5saW5lTGF5b3V0VW5pdD4oMCwgbV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5kZXNjZW50
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICAg
ICAgLy8gVG9wIGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFzZWxpbmUsIGl0IG9u
bHkgcHVzaGVzIHRoZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBkb3duLgotICAgICAgICAg
ICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdo
dCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OkJvdHRvbTogewotICAgICAgICAgICAgICAgIC8vIEJvdHRvbSBhbGlnbmVkLCB0YWxsIGNv
bnRlbnQgcHVzaGVzIHRoZSBiYXNlbGluZSBmdXJ0aGVyIGRvd24gZnJvbSB0aGUgbGluZSB0b3Au
Ci0gICAgICAgICAgICAgICAgYXV0byBsaW5lTG9naWNhbEhlaWdodCA9IG1fbGluZUJveC5sb2dp
Y2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmdpbkJveEhlaWdodCA+IGxpbmVM
b2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2Fs
SGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
bGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihtX2xpbmVCb3guYWxpZ25tZW50
QmFzZWxpbmUoKSArIChtYXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRF
RF9ZRVQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1IYW5naW5nQ29udGVudCBMaW5l
Q29udGVudEFsaWduZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudChMaW5lQnVpbGRlcjo6SXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3QK
LXsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OwotICAgIGlm
IChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPT0gTGluZUJ1aWxkZXI6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRp
dGlvbmFsKCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1f
cnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29u
dGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bi5pc0xp
bmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFs
KCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXJ1bi5o
YXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBD
aGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KLSAgICAgICAg
aWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNv
bmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgotICAgICAgICBoYW5naW5n
Q29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Ci19Ci0KLUlubGluZUxheW91dFVuaXQgTGluZUNvbnRl
bnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mIHJ1bikg
Y29uc3QKLXsKLSAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNz
KCk7Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkKLSAgICAgICAg
cmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmlj
cy5oZWlnaHQoKTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94KTsKLSAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBsYXlvdXRC
b3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5LmNv
bnRlbnRCb3hIZWlnaHQoKTsKLQotICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcu
IGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdp
biBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KLSAgICByZXR1cm4g
Ym94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci19Ci0KLUxpbmVCdWlsZGVyOjpMaW5lQnVp
bGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQsIE9wdGlvbmFsPFRleHRBbGlnbk1vZGU+IGhvcml6b250YWxBbGlnbm1lbnQsIEludHJpbnNp
Y1NpemluZyBpbnRyaW5zaWNTaXppbmcpCitMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQogICAgIDog
bV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKICAgICAs
IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykKLSAgICAsIG1faG9yaXpvbnRhbEFs
aWdubWVudChob3Jpem9udGFsQWxpZ25tZW50KQotICAgICwgbV9pc0ludHJpbnNpY1NpemluZyhp
bnRyaW5zaWNTaXppbmcgPT0gSW50cmluc2ljU2l6aW5nOjpZZXMpCiAgICAgLCBtX3Nob3VsZEln
bm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyhSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpCiB7
CiB9CkBAIC00MDUsNyArNzcsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpjbGVhcigpCiAgICAgbV9s
aW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50ID0geyB9Owog
fQogCi12b2lkIExpbmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
aXNMYXN0TGluZSkKK3ZvaWQgTGluZUJ1aWxkZXI6OmNsb3NlKCkKIHsKICNpZiBBU1NFUlRfRU5B
QkxFRAogICAgIG1faXNDbG9zZWQgPSB0cnVlOwpAQCAtNDE0LDM0ICs4Niw2IEBAIHZvaWQgTGlu
ZUJ1aWxkZXI6OmNsb3NlKElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQog
ICAgIC8vIDIuIEFsaWduIG1lcmdlZCBydW5zIGJvdGggdmVydGljYWxseSBhbmQgaG9yaXpvbnRh
bGx5LgogICAgIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpOwogICAgIHZpc3VhbGx5
Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KCk7Ci0gICAgaWYgKG1faXNJbnRyaW5zaWNT
aXppbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGVudEFsaWduZXIgPSBMaW5l
Q29udGVudEFsaWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpLCBtX2xpbmVCb3gsIG1fcnVucywg
YXZhaWxhYmxlV2lkdGgoKSB9OwotICAgIGNvbnRlbnRBbGlnbmVyLmFkanVzdEJhc2VsaW5lQW5k
TGluZUhlaWdodCgpOwotICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkoKSkgewotICAgICAgICBtX2xp
bmVCb3gucmVzZXRBbGlnbm1lbnRCYXNlbGluZSgpOwotICAgICAgICBtX2xpbmVCb3guc2V0TG9n
aWNhbEhlaWdodCh7IH0pOwotICAgIH0KLSAgICAvLyBSZW1vdmUgZGVzY2VudCB3aGVuIGFsbCBj
b250ZW50IGlzIGJhc2VsaW5lIGFsaWduZWQgYnV0IG5vbmUgb2YgdGhlbSBoYXZlIGRlc2NlbnQu
Ci0gICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0KCkucXVpcmtzKCkubGluZURlc2NlbnROZWVkc0Nv
bGxhcHNpbmcobV9ydW5zKSkgewotICAgICAgICBtX2xpbmVCb3guc2hyaW5rVmVydGljYWxseSht
X2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpOwotICAgICAgICBtX2xpbmVCb3gu
cmVzZXREZXNjZW50KCk7Ci0gICAgfQotICAgIGNvbnRlbnRBbGlnbmVyLmFsaWduVmVydGljYWxs
eSgpOwotCi0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0gewotICAg
ICAgICBBU1NFUlQobV9ob3Jpem9udGFsQWxpZ25tZW50KTsKLSAgICAgICAgaWYgKG1faG9yaXpv
bnRhbEFsaWdubWVudCAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICAgICAgcmV0
dXJuICptX2hvcml6b250YWxBbGlnbm1lbnQ7Ci0gICAgICAgIC8vIFRleHQgaXMganVzdGlmaWVk
IGFjY29yZGluZyB0byB0aGUgbWV0aG9kIHNwZWNpZmllZCBieSB0aGUgdGV4dC1qdXN0aWZ5IHBy
b3BlcnR5LAotICAgICAgICAvLyBpbiBvcmRlciB0byBleGFjdGx5IGZpbGwgdGhlIGxpbmUgYm94
LiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0ZXh0LWFsaWduLWxhc3QsCi0gICAgICAg
IC8vIHRoZSBsYXN0IGxpbmUgYmVmb3JlIGEgZm9yY2VkIGJyZWFrIG9yIHRoZSBlbmQgb2YgdGhl
IGJsb2NrIGlzIHN0YXJ0LWFsaWduZWQuCi0gICAgICAgIGlmIChtX3J1bnMubGFzdCgpLmlzTGlu
ZUJyZWFrKCkgfHwgaXNMYXN0TGluZSA9PSBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50OjpZZXMpCi0gICAgICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7
Ci0gICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OwotICAgIH07Ci0gICAgY29u
dGVudEFsaWduZXIuYWxpZ25Ib3Jpem9udGFsbHkoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50
KCksIGlzTGFzdExpbmUpOwogfQogCiB2b2lkIExpbmVCdWlsZGVyOjpyZW1vdmVUcmFpbGluZ1Ry
aW1tYWJsZUNvbnRlbnQoKQpAQCAtNDUyLDEwICs5NiwxMCBAQCB2b2lkIExpbmVCdWlsZGVyOjpy
ZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKQogICAgIC8vIENvbXBsZXggbGluZSBsYXlv
dXQgcXVpcms6IGtlZXAgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYXJvdW5kIHdoZW4gaXQgaXMg
Zm9sbG93ZWQgYnkgYSBsaW5lIGJyZWFrLCB1bmxlc3MgdGhlIGNvbnRlbnQgb3ZlcmZsb3dzIHRo
ZSBsaW5lLgogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpIHsKICAgICAgICAg
YXV0byBpc1RleHRBbGlnblJpZ2h0ID0gWyZdIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2hvcml6
b250YWxBbGlnbm1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbEFsaWdubWVu
dCA9PSBUZXh0QWxpZ25Nb2RlOjpSaWdodAotICAgICAgICAgICAgICAgIHx8IG1faG9yaXpvbnRh
bEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodAotICAgICAgICAgICAgICAg
IHx8IG1faG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpFbmQ7CisgICAgICAg
ICAgICBhdXRvIHRleHRBbGlnbiA9IGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpLnN0eWxlKCku
dGV4dEFsaWduKCk7CisgICAgICAgICAgICByZXR1cm4gdGV4dEFsaWduID09IFRleHRBbGlnbk1v
ZGU6OlJpZ2h0CisgICAgICAgICAgICAgICAgfHwgdGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6
OldlYktpdFJpZ2h0CisgICAgICAgICAgICAgICAgfHwgdGV4dEFsaWduID09IFRleHRBbGlnbk1v
ZGU6OkVuZDsKICAgICAgICAgICAgIH0oKTsKIAogICAgICAgICBpZiAobV9ydW5zLmxhc3QoKS5p
c0xpbmVCcmVhaygpICYmIGF2YWlsYWJsZVdpZHRoKCkgPj0gMCAmJiAhaXNUZXh0QWxpZ25SaWdo
dCkgewpAQCAtNzAzLDExICszNDcsNyBAQCBib29sIExpbmVCdWlsZGVyOjppc1Zpc3VhbGx5Tm9u
RW1wdHkoY29uc3QgUnVuJiBydW4pIGNvbnN0CiAgICAgICAgIGlmIChydW4ubGF5b3V0Qm94KCku
aXNSZXBsYWNlZEJveCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIEFTU0VS
VChydW4ubGF5b3V0Qm94KCkuaXNJbmxpbmVCbG9ja0JveCgpIHx8IHJ1bi5sYXlvdXRCb3goKS5p
c0lubGluZVRhYmxlQm94KCkpOwotICAgICAgICBpZiAoIXJ1bi5sb2dpY2FsV2lkdGgoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1faXNJbnRyaW5zaWNTaXppbmcg
fHwgZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChydW4ubGF5b3V0Qm94KCkpLmhl
aWdodCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHJ1bi5sb2dpY2FsV2lkdGgoKTsKICAgICB9CiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTg5NCw3ICs1MzQsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpSdW46
OnNldEV4cGFuc2lvbkJlaGF2aW9yKEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9y
KQogICAgIG1fZXhwYW5zaW9uLmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3I7CiB9CiAKLWlu
bGluZSBFeHBhbnNpb25CZWhhdmlvciBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25CZWhhdmlv
cigpIGNvbnN0CitFeHBhbnNpb25CZWhhdmlvciBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25C
ZWhhdmlvcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVGV4dCgpKTsKICAgICByZXR1cm4gbV9l
eHBhbnNpb24uYmVoYXZpb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRleCA0YjZjZWJmMjEyNzU4
ZDE5ZTdkNDY3ZTYyNzMyZmE2OWIxMjE5YjA3Li44ZTRkOTU2MGExMTY3ZDE3MGQ2ODdkNzVjMDEx
NWQxOWJiYmFhNWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTQ4LDE0ICs0OCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIGJvb2wgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsK
ICAgICB9OwogCi0gICAgZW51bSBjbGFzcyBJbnRyaW5zaWNTaXppbmcgeyBObywgWWVzIH07Ci0g
ICAgTGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBPcHRpb25hbDxU
ZXh0QWxpZ25Nb2RlPiwgSW50cmluc2ljU2l6aW5nKTsKKyAgICBMaW5lQnVpbGRlcihjb25zdCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwogICAgIH5MaW5lQnVpbGRlcigpOwogCiAgICAgdm9p
ZCBpbml0aWFsaXplKGNvbnN0IENvbnN0cmFpbnRzJik7Ci0KLSAgICBlbnVtIGNsYXNzIElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGNsb3NlKElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgdm9pZCBh
cHBlbmQoY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsK
ICAgICB2b2lkIGFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJdGVtKGNvbnN0IElubGluZVRleHRJ
dGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBlbik7CkBA
IC02OCw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzVHJhaWxpbmdSdW5GdWxseVRyaW1t
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmlzVHJhaWxp
bmdSdW5GdWxseVRyaW1tYWJsZSgpOyB9CiAKICAgICBjb25zdCBMaW5lQm94JiBsaW5lQm94KCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lQm94OyB9CisgICAgTGluZUJveCYgbGluZUJveCgpIHsgcmV0
dXJuIG1fbGluZUJveDsgfQogICAgIHZvaWQgbW92ZUxvZ2ljYWxMZWZ0KElubGluZUxheW91dFVu
aXQpOwogICAgIHZvaWQgbW92ZUxvZ2ljYWxSaWdodChJbmxpbmVMYXlvdXRVbml0KTsKICAgICB2
b2lkIHNldEhhc0ludHJ1c2l2ZUZsb2F0KCkgeyBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gdHJ1ZTsg
fQpAQCAtMTQ0LDYgKzE0Miw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHVzaW5nIFJ1bkxpc3Qg
PSBWZWN0b3I8UnVuLCAxMD47CiAgICAgY29uc3QgUnVuTGlzdCYgcnVucygpIGNvbnN0IHsgcmV0
dXJuIG1fcnVuczsgfQorICAgIFJ1bkxpc3QmIHJ1bnMoKSB7IHJldHVybiBtX3J1bnM7IH0KIAog
ICAgIHN0YXRpYyBBc2NlbnRBbmREZXNjZW50IGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250
TWV0cmljcyYsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpOwogCkBAIC0xOTgs
OCArMTk3LDYgQEAgcHJpdmF0ZToKICAgICBSdW5MaXN0IG1fcnVuczsKICAgICBUcmltbWFibGVU
cmFpbGluZ0NvbnRlbnQgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQ7CiAgICAgSW5saW5lTGF5
b3V0VW5pdCBtX2xpbmVMb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgT3B0aW9uYWw8VGV4dEFsaWdu
TW9kZT4gbV9ob3Jpem9udGFsQWxpZ25tZW50OwotICAgIGJvb2wgbV9pc0ludHJpbnNpY1Npemlu
ZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0ludHJ1c2l2ZUZsb2F0IHsgZmFsc2UgfTsKICAg
ICBMaW5lQm94IG1fbGluZUJveDsKICAgICBPcHRpb25hbDxib29sPiBtX2xpbmVJc1Zpc3VhbGx5
RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5j
cHAKaW5kZXggNThkZTYxM2EwZjM4MzI3OWY5MWI3ZjQzYWE5ODBjYzljMzg3ZDA5Yy4uODAyYmVk
ZDhkNzMxNzUyNTgzM2E0NzQwOGRmMTBkNTQxNzhiMjk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0
LmNwcApAQCAtMzMyLDIyICszMzIsNyBAQCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQg
TGluZUxheW91dENvbnRleHQ6OmNsb3NlKExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdAogICAgIGF1
dG8gdHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydCArIG51bWJlck9m
Q29tbWl0dGVkSXRlbXMgLSAxOwogICAgIGF1dG8gbGluZVJhbmdlID0gSW5saW5lSXRlbVJhbmdl
IHsgbGF5b3V0UmFuZ2Uuc3RhcnQsIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ICsgMSB9OwogICAg
IEFTU0VSVChsaW5lUmFuZ2UuZW5kIDw9IGxheW91dFJhbmdlLmVuZCk7Ci0KLSAgICBhdXRvIGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9IFsmXSB7Ci0gICAgICAgIGlmIChsaW5lUmFuZ2Uu
ZW5kID09IGxheW91dFJhbmdlLmVuZCkKLSAgICAgICAgICAgIHJldHVybiBMaW5lQnVpbGRlcjo6
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXM7Ci0gICAgICAgIGlmIChwYXJ0aWFsQ29u
dGVudCkKLSAgICAgICAgICAgIHJldHVybiBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50OjpObzsKLSAgICAgICAgLy8gT21pdCBmbG9hdHMgdG8gc2VlIGlmIHRoaXMgaXMg
dGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBjb250ZW50LgotICAgICAgICBmb3IgKGF1dG8gaSA9
IGxheW91dFJhbmdlLmVuZDsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFtX2lubGluZUl0ZW1z
W2ldLmlzRmxvYXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA9PSB0cmFpbGluZ0lubGlu
ZUl0ZW1JbmRleCA/IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Olll
cyA6IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZsb2F0IGl0
ZW0uCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gTGluZUJ1
aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87Ci0gICAgfSgpOwotICAgIGxp
bmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICBsaW5lLmNsb3NlKCk7
CiAgICAgLy8gQWRqdXN0IGh5cGhlbmF0ZWQgbGluZSBjb3VudC4KICAgICBtX3N1Y2Nlc3NpdmVI
eXBoZW5hdGVkTGluZUNvdW50ID0gcGFydGlhbENvbnRlbnQgJiYgcGFydGlhbENvbnRlbnQtPnRy
YWlsaW5nQ29udGVudEhhc0h5cGhlbiA/IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQg
KyAxIDogMDsKICAgICByZXR1cm4gTGluZUNvbnRlbnQgeyBwYXJ0aWFsQ29udGVudCwgbGluZVJh
bmdlLCBXVEZNb3ZlKG1fZmxvYXRzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKaW5kZXggMzRiOGZj
YjlkYzRhZjU3Y2YyODZkYmFlNmMwOThlMjZjY2MzOGMwMi4uMmQyZmU1ZDIzNDA2YTgzM2M4MjU3
ZDk4NTJhMmM4M2Y1MjJlZmE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCkBAIC01MSw3ICs1MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHVuc2lnbmVkIG92ZXJmbG93Q29udGVudExlbmd0aCB7
IDAgfTsKICAgICAgICAgfTsKICAgICAgICAgT3B0aW9uYWw8UGFydGlhbENvbnRlbnQ+IHBhcnRp
YWxDb250ZW50OwotICAgICAgICBJbmxpbmVJdGVtUmFuZ2UgaW5saW5lSXRlbXM7CisgICAgICAg
IElubGluZUl0ZW1SYW5nZSBpbmxpbmVJdGVtUmFuZ2U7CiAgICAgICAgIHN0cnVjdCBGbG9hdCB7
CiAgICAgICAgICAgICBib29sIGlzSW50cnVzaXZlIHsgdHJ1ZSB9OwogICAgICAgICAgICAgY29u
c3QgSW5saW5lSXRlbSogaXRlbSB7IG51bGxwdHIgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407319</attachid>
            <date>2020-08-26 12:16:18 -0700</date>
            <delta_ts>2020-08-26 19:26:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215016-20200826121617.patch</filename>
            <type>text/plain</type>
            <size>49908</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTYwNzkxOGQ5NjI3ZWVk
OTA2NmZlNjEyYTM1ZDZiZjg3ZTgyZTI3Yy4uMTFhOTlkMTk0ODYzOWY1Mzc2Y2VmMTBjMGU3ZTRh
NjIzODQxMmVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDYxIEBACiAyMDIwLTA4LTI2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlciBzaG91bGQgbm90IGFsaWduIHRoZSBydW5zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwMTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBtb3Zpbmcg
YWxpZ25tZW50IGxvZ2ljIG92ZXIgdG8gdGhlIExpbmVCb3guCisgICAgICAgIExpbmVCdWlsZGVy
IGlzIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgY29udGVudCB0byB0aGUgbGluZSwgYnV0IHRoZSBm
aW5hbCBhbGlnbm1lbnQgd2lsbCBiZSBkb25lIGJ5IHRoZSBMaW5lQm94LgorICAgICAgICBUaGlz
IHdvcmtzIHdlbGwgd2l0aCBwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24sIHdoZXJlIHdlIHVz
ZSB0aGUgTGluZUJ1aWxkZXIgdG8gY29tcHV0ZSBsaW5lIHdpZHRoIGJ1dCB3ZQorICAgICAgICBk
b24ndCByZWFsbHkgbmVlZCB0byBjb25zdHJ1Y3QgYSBMaW5lQm94IChhbmQgbm8gYWxpZ25tZW50
IGlzIG5lZWRlZCkuICAKKworICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2lu
Z0NvbnRlbnQ6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2lu
Z0NvbnRlbnQ6OmlzQ29uZGl0aW9uYWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpIYW5naW5nQ29udGVudDo6c2V0SXNDb25kaXRpb25hbCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkhhbmdpbmdDb250ZW50OjpleHBhbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpIYW5naW5nQ29udGVudDo6cmVzZXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Q29udGVudEFsaWduZXI6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpsYXlvdXRTdGF0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGln
bmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGln
bkhvcml6b250YWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxp
Z25lcjo6YWxpZ25WZXJ0aWNhbGx5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNv
bnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVDb250ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpjb2xsZWN0SGFuZ2luZ0NvbnRl
bnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6
OnJ1bkNvbnRlbnRIZWlnaHQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxp
bmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoRm9yQ29u
c3RyYWludCBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJ1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6
TGluZUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cmVtb3ZlVHJhaWxp
bmdUcmltbWFibGVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxk
ZXI6OmlzVmlzdWFsbHlOb25FbXB0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkhhbmdpbmdDb250ZW50Ojp3aWR0aCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50Ojppc0NvbmRpdGlvbmFsIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6OnNldElzQ29uZGl0aW9u
YWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpIYW5naW5nQ29udGVudDo6
ZXhwYW5kKTogRGVsZXRlZC4KKyAgICAgICAgKCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50OjpyZXNldCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6Zm9ybWF0dGluZ0NvbnRleHQgY29uc3Qp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6
OmxheW91dFN0YXRlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUNvbnRlbnRBbGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRhbGx5
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVy
OjphbGlnblZlcnRpY2FsbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpM
aW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWdu
ZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6cnVuQ29udGVudEhlaWdodCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1
aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmxpbmVCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQnVpbGRlcjo6cnVucyk6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UpOgorICAgICAgICAq
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0Lmg6CisKKzIwMjAtMDgt
MjUgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKwogICAgICAgICBbTEZDXVtJRkNd
IE1vdmUgaW5saW5lIHJ1biBhbGlnbm1lbnQgbG9naWMgdG8gYSBkZWRpY2F0ZWQgY2xhc3MKICAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDUyNwogICAg
ICAgICA8cmRhcjovL3Byb2JsZW0vNjYxMTU3OTY+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dC5jcHAKaW5kZXggY2Q4ZmExYjIwYzg0MDdkODUyODRjOTU5Y2Q0NzZhZDgyMTlkMzU3ZS4u
MDM2ZWM1NjUyNWY0NWRkMjgwNjg5MGUzMTkyYjc1YjQ5NmU2ZDg3MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNzYsNiArNzYsMzMzIEBAIHN0YXRpYyBpbmxpbmUg
Y29uc3QgQm94KiBuZXh0SW5saW5lTGV2ZWxCb3hUb0xheW91dChjb25zdCBCb3gmIGxheW91dEJv
eCwgY29uc3QKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorc3RydWN0IEhhbmdpbmdDb250ZW50
IHsKK3B1YmxpYzoKKyAgICB2b2lkIHJlc2V0KCk7CisKKyAgICBJbmxpbmVMYXlvdXRVbml0IHdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQorICAgIGJvb2wgaXNDb25kaXRpb25hbCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNDb25kaXRpb25hbDsgfQorCisgICAgdm9pZCBzZXRJc0NvbmRp
dGlvbmFsKCkgeyBtX2lzQ29uZGl0aW9uYWwgPSB0cnVlOyB9CisgICAgdm9pZCBleHBhbmQoSW5s
aW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3dpZHRoICs9IHdpZHRoOyB9CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBtX2lzQ29uZGl0aW9uYWwgeyBmYWxzZSB9OworICAgIElubGluZUxheW91dFVuaXQg
bV93aWR0aCB7IDAgfTsKK307CisKK3ZvaWQgSGFuZ2luZ0NvbnRlbnQ6OnJlc2V0KCkKK3sKKyAg
ICBtX2lzQ29uZGl0aW9uYWwgPSBmYWxzZTsKKyAgICBtX3dpZHRoID0gIDA7Cit9CisKK2NsYXNz
IExpbmVDb250ZW50QWxpZ25lciB7CitwdWJsaWM6CisgICAgTGluZUNvbnRlbnRBbGlnbmVyKGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgTGluZUJveCYsIExpbmVCdWlsZGVyOjpSdW5M
aXN0JiwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CisKKyAgICBlbnVtIGNsYXNz
IElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCB7IE5vLCBZZXMgfTsKKyAgICB2b2lkIGFsaWdu
SG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7
CisgICAgdm9pZCBhbGlnblZlcnRpY2FsbHkoKTsKKyAgICB2b2lkIGFkanVzdEJhc2VsaW5lQW5k
TGluZUhlaWdodCgpOworCitwcml2YXRlOgorICAgIHZvaWQganVzdGlmeVJ1bnMoSW5saW5lTGF5
b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7CisgICAgSGFuZ2luZ0NvbnRlbnQgY29sbGVjdEhhbmdp
bmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7CisgICAgSW5saW5l
TGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mKSBjb25z
dDsKKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KKyAgICBMYXlv
dXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgp
LmxheW91dFN0YXRlKCk7IH0KKworICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBt
X2lubGluZUZvcm1hdHRpbmdDb250ZXh0OworICAgIExpbmVCb3gmIG1fbGluZUJveDsKKyAgICBM
aW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOworICAgIElubGluZUxheW91dFVuaXQgbV9hdmFp
bGFibGVXaWR0aDsKK307CisKK0xpbmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGlnbmVy
KGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwg
TGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMsIElubGluZUxheW91
dFVuaXQgYXZhaWxhYmxlV2lkdGgpCisgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlu
bGluZUZvcm1hdHRpbmdDb250ZXh0KQorICAgICwgbV9saW5lQm94KGxpbmVCb3gpCisgICAgLCBt
X3J1bnMocnVucykKKyAgICAsIG1fYXZhaWxhYmxlV2lkdGgoYXZhaWxhYmxlV2lkdGgpCit7Cit9
CisKK3ZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250YWxseShUZXh0QWxpZ25N
b2RlIGhvcml6b250YWxBbGlnbm1lbnQsIElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xh
c3RMaW5lKQoreworICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0NvbnRl
bnQoaXNMYXN0TGluZSk7CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IG1fYXZhaWxhYmxlV2lk
dGggKyBoYW5naW5nQ29udGVudC53aWR0aCgpOworICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8
IGF2YWlsYWJsZVdpZHRoIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChob3Jpem9u
dGFsQWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKKyAgICAgICAganVzdGlm
eVJ1bnMoYXZhaWxhYmxlV2lkdGgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBhZGp1c3RtZW50Rm9yQWxpZ25tZW50ID0gWyZdIChhdXRvIGF2YWlsYWJsZVdpZHRoKSAtPiBP
cHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiB7CisgICAgICAgIHN3aXRjaCAoaG9yaXpvbnRhbEFs
aWdubWVudCkgeworICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6CisgICAgICAgIGNh
c2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0TGVmdDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2Rl
OjpTdGFydDoKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIGNhc2UgVGV4dEFsaWdu
TW9kZTo6UmlnaHQ6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Cisg
ICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5kOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoLCAwKTsKKyAgICAgICAgY2FzZSBU
ZXh0QWxpZ25Nb2RlOjpDZW50ZXI6CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0
Q2VudGVyOgorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2
YWlsYWJsZVdpZHRoIC8gMiwgMCk7CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlm
eToKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfTsKKworICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGln
bm1lbnQoYXZhaWxhYmxlV2lkdGgpOworICAgIGlmICghYWRqdXN0bWVudCkKKyAgICAgICAgcmV0
dXJuOworICAgIC8vIEhvcml6b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9ubHkg
YWRqdXN0IHRoZSBydW5zIGJ1dCBhbHNvIG1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGxpbmUg
Ym94IGlzIGFsaWduZWQgYXMgd2VsbAorICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1hbGln
bjogY2VudGVyOyB3aWR0aDogMTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxpbmUg
Ym94IHdpbGwgYWxzbyBiZSBjZW50ZXJlZAorICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQgYXQg
MHB4IGFsbCB0aGUgd2F5IHRvIFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgorICAg
IG1fbGluZUJveC5tb3ZlSG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKKyAgICBmb3IgKGF1dG8m
IHJ1biA6IG1fcnVucykKKyAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQp
OworfQorCit2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5KCkKK3sKKyAg
ICBhdXRvIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QgPSBtX2xpbmVCb3gubG9naWNhbFJlY3QoKTsK
KyAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICBhdXRvIGxvZ2ljYWxUb3Ag
PSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxh
eW91dEJveCgpOworICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUo
KS52ZXJ0aWNhbEFsaWduKCk7CisgICAgICAgIGF1dG8gYXNjZW50ID0gbGF5b3V0Qm94LnN0eWxl
KCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKKworICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxp
Z24pIHsKKyAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZToKKyAgICAgICAgICAg
IGlmIChydW4uaXNMaW5lQnJlYWsoKSB8fCBydW4uaXNUZXh0KCkpCisgICAgICAgICAgICAgICAg
bG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50OworICAg
ICAgICAgICAgZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgeworICAgICAgICAgICAg
ICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJv
eChsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxp
Z25tZW50QmFzZWxpbmUoKSAtIGFzY2VudCAtIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpIC0gYm94
R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRp
bmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUo
ZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKKyAgICAgICAgICAgICAgICAvLyBT
cGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVt
cHR5LgorICAgICAgICAgICAgICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGZvcm1hdHRp
bmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpLmJhc2VsaW5l
KCk7CisgICAgICAgICAgICAgICAgLy8gVGhlIGlubGluZS1ibG9jaydzIGJhc2VsaW5lIG9mZnNl
dCBpcyByZWxhdGl2ZSB0byBpdHMgY29udGVudCBib3guIExldCdzIGNvbnZlcnQgaXQgcmVsYXRp
dmUgdG8gdGhlIG1hcmdpbiBib3guCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIF9fX19f
X19fX19fX19fXyA8LSBtYXJnaW4gYm94CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfAor
ICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgIF9fX19fX19fX19fXyAgPC0gYm9yZGVyIGJv
eAorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfAorICAgICAgICAgICAgICAgIC8vICAg
ICAgICAgIHwgfCAgX19fX19fX19fICA8LSBjb250ZW50IGJveAorICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgIHwgfCB8ICAgXgorICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAg
fCAgPC0gYmFzZWxpbmUgb2Zmc2V0CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwg
ICB8CisgICAgICAgICAgICAgICAgLy8gICAgIHRleHQgfCB8IHwgICB2IHRleHQKKyAgICAgICAg
ICAgICAgICAvLyAgICAgLS0tLS18LXwtfC0tLS0tLS0tLS0gPC0gYmFzZWxpbmUKKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgICAgIGF1
dG8gYmFzZWxpbmVGcm9tTWFyZ2luQm94ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBi
b3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9y
KDApICsgaW5saW5lQmxvY2tCYXNlbGluZTsKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0g
bV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSBiYXNlbGluZUZyb21NYXJnaW5Cb3g7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0g
Zm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hH
ZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCku
dmFsdWVPcigwX2x1KSArIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpICsgYm94R2VvbWV0cnku
bWFyZ2luQWZ0ZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6CisgICAgICAgICAgICBsb2dpY2FsVG9wID0gMF9s
dTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRv
bToKKyAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3gubG9naWNhbEJvdHRvbSgpIC0g
cnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBydW4uYWRqdXN0TG9naWNhbFRvcChs
b2dpY2FsVG9wKTsKKyAgICAgICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhl
IHJ1biBvdmVyZmxvd3MgdGhlIGxpbmUuCisgICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3Qu
ZXhwYW5kVmVydGljYWxseVRvQ29udGFpbihydW4ubG9naWNhbFJlY3QoKSk7CisgICAgICAgIC8v
IENvbnZlcnQgcnVucyBmcm9tIHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0IHRvIHRoZSBm
b3JtYXR0aW5nIHJvb3QncyBib3JkZXIgYm94IHRvcC9sZWZ0LgorICAgICAgICBydW4ubW92ZVZl
cnRpY2FsbHkobV9saW5lQm94LmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIHJ1bi5tb3ZlSG9yaXpv
bnRhbGx5KG1fbGluZUJveC5sb2dpY2FsTGVmdCgpKTsKKyAgICB9CisgICAgbV9saW5lQm94LnNl
dFNjcm9sbGFibGVPdmVyZmxvdyhzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0KTsKK30KKwordm9pZCBM
aW5lQ29udGVudEFsaWduZXI6Omp1c3RpZnlSdW5zKElubGluZUxheW91dFVuaXQgYXZhaWxhYmxl
V2lkdGgpCit7CisgICAgQVNTRVJUKGF2YWlsYWJsZVdpZHRoID4gMCk7CisgICAgLy8gQ29sbGVj
dCB0aGUgZXhwYW5zaW9uIG9wcG9ydHVuaXR5IG51bWJlcnMgYW5kIGZpbmQgdGhlIGxhc3QgcnVu
IHdpdGggY29udGVudC4KKyAgICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwor
ICAgIExpbmVCdWlsZGVyOjpSdW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7CisgICAg
Zm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKKyAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudCArPSBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOworICAgICAgICBpZiAocnVu
LmlzVGV4dCgpIHx8IHJ1bi5pc0JveCgpKQorICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50
ID0gJnJ1bjsKKyAgICB9CisgICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxhc3QgcnVuJ3MgdHJh
aWxpbmcgZXhwYW5zaW9uLgorICAgIGlmIChsYXN0UnVuV2l0aENvbnRlbnQgJiYgbGFzdFJ1bldp
dGhDb250ZW50LT5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7CisgICAgICAgIC8vIFR1cm4g
b2ZmIHRoZSB0cmFpbGluZyBiaXRzIGZpcnN0IGFuZCBhZGQgdGhlIGZvcmJpZCB0cmFpbGluZyBl
eHBhbnNpb24uCisgICAgICAgIGF1dG8gbGVmdEV4cGFuc2lvbiA9IGxhc3RSdW5XaXRoQ29udGVu
dC0+ZXhwYW5zaW9uQmVoYXZpb3IoKSAmIExlZnRFeHBhbnNpb25NYXNrOworICAgICAgICBsYXN0
UnVuV2l0aENvbnRlbnQtPnNldEV4cGFuc2lvbkJlaGF2aW9yKGxlZnRFeHBhbnNpb24gfCBGb3Ji
aWRSaWdodEV4cGFuc2lvbik7CisgICAgfQorICAgIC8vIE5vdGhpbmcgdG8gZGlzdHJpYnV0ZT8K
KyAgICBpZiAoIWV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQpCisgICAgICAgIHJldHVybjsKKyAg
ICAvLyBEaXN0cmlidXRlIHRoZSBleHRyYSBzcGFjZS4KKyAgICBhdXRvIGV4cGFuc2lvblRvRGlz
dHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKKyAg
ICBJbmxpbmVMYXlvdXRVbml0IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKKyAgICBmb3IgKGF1
dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICAvLyBFeHBhbmQgYW5kIG1vdmVzIHJ1bnMgYnkg
dGhlIGFjY3VtdWxhdGVkIGV4cGFuc2lvbi4KKyAgICAgICAgaWYgKCFydW4uaGFzRXhwYW5zaW9u
T3Bwb3J0dW5pdHkoKSkgeworICAgICAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11
bGF0ZWRFeHBhbnNpb24pOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUKHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCkpOworICAgICAgICBhdXRv
IGNvbXB1dGVkRXhwYW5zaW9uID0gZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQoKTsKKyAgICAgICAgcnVuLnNldENvbXB1dGVkSG9yaXpvbnRhbEV4
cGFuc2lvbihjb21wdXRlZEV4cGFuc2lvbik7CisgICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5
KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKKyAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0g
Y29tcHV0ZWRFeHBhbnNpb247CisgICAgfQorfQorCit2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6
YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCkKK3sKKyAgICB1bnNpZ25lZCBpbmxpbmVDb250
YWluZXJOZXN0aW5nTGV2ZWwgPSAwOworICAgIGF1dG8gaGFzU2VlbkRpcmVjdFRleHRPckxpbmVC
cmVhayA9IGZhbHNlOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgIGF1
dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKKyAgICAgICAgYXV0byYgc3R5bGUgPSBs
YXlvdXRCb3guc3R5bGUoKTsKKworICAgICAgICBydW4uc2V0TG9naWNhbEhlaWdodChydW5Db250
ZW50SGVpZ2h0KHJ1bikpOworCisgICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGlu
ZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGlmIChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwp
IHsKKyAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5IGFkanVzdGVkIHRoZSBsaW5lIGhl
aWdodC9iYXNlbGluZSB0aHJvdWdoIHRoZSBwYXJlbnQgaW5saW5lIGNvbnRhaW5lci4gCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGFz
U2VlbkRpcmVjdFRleHRPckxpbmVCcmVhaykgeworICAgICAgICAgICAgICAgIC8vIGUuZyBkaXY+
Zmlyc3QgdGV4dDwvZGl2PiBvciA8ZGl2PjxzcGFuPm5lc3RlZDxzcGFuPmZpcnN0IGRpcmVjdCB0
ZXh0PC9kaXY+LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhayA9IHRydWU7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChydW4uaXNDb250YWluZXJTdGFy
dCgpKSB7CisgICAgICAgICAgICArK2lubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKKyAgICAg
ICAgICAgIC8vIElubGluZSBjb250YWluZXJzIHN0cmV0Y2ggdGhlIGxpbmUgYnkgdGhlaXIgZm9u
dCBzaXplLgorICAgICAgICAgICAgLy8gVmVydGljYWwgbWFyZ2lucywgcGFkZGluZ3MgYW5kIGJv
cmRlcnMgZG9uJ3QgY29udHJpYnV0ZSB0byB0aGUgbGluZSBoZWlnaHQuCisgICAgICAgICAgICBh
dXRvJiBmb250TWV0cmljcyA9IHN0eWxlLmZvbnRNZXRyaWNzKCk7CisgICAgICAgICAgICBpZiAo
c3R5bGUudmVydGljYWxBbGlnbigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKSB7CisgICAg
ICAgICAgICAgICAgYXV0byBoYWxmTGVhZGluZyA9IExpbmVCdWlsZGVyOjpoYWxmTGVhZGluZ01l
dHJpY3MoZm9udE1ldHJpY3MsIHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKKyAgICAgICAg
ICAgICAgICAvLyBCb3RoIGhhbGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2VudCBjb3VsZCBiZSBu
ZWdhdGl2ZSAodGFsbCBmb250IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1ZSkKKyAgICAgICAg
ICAgICAgICBpZiAoaGFsZkxlYWRpbmcuZGVzY2VudCA+IDApCisgICAgICAgICAgICAgICAgICAg
IG1fbGluZUJveC5zZXREZXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRlc2NlbnQpOworICAg
ICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5hc2NlbnQgPiAwKQorICAgICAgICAgICAgICAg
ICAgICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmFzY2VudCk7Cisg
ICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobV9saW5l
Qm94LmFzY2VudEFuZERlc2NlbnQoKS5oZWlnaHQoKSk7CisgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihmb250TWV0
cmljcy5oZWlnaHQoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChydW4uaXNDb250YWluZXJFbmQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGxpbmUn
cyBiYXNlbGluZSBhbmQgaGVpZ2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVzdGVkIGF0IENvbnRh
aW5lclN0YXJ0LgorICAgICAgICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZl
bCk7CisgICAgICAgICAgICAtLWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7Cisg
ICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0
cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0g
Ym94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoc3R5
bGUudmVydGljYWxBbGlnbigpKSB7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJh
c2VsaW5lOiB7CisgICAgICAgICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94
KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5saW5lIGNvbnRlbnQg
YWx3YXlzIGhhdmUgYmFzZWxpbmVzLgorICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0
aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRl
KGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94KSk7CisgICAgICAgICAgICAgICAgICAg
IC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0
eS4KKyAgICAgICAgICAgICAgICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBmb3JtYXR0aW5nU3Rh
dGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYXV0byBiZWZvcmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSAr
IGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVl
T3IoMCk7CisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGlu
ZUlmR3JlYXRlcihiZWZvcmVIZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZSgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2lu
Qm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAvLyBOb24gaW5saW5lLWJsb2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUgKGluY2x1ZGlu
ZyB0aGVpciBib3R0b20gbWFyZ2luKS4KKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNl
dEFzY2VudElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICAv
LyBJZ25vcmUgbmVnYXRpdmUgZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50IGlzIGEgdGhp
bmcpLgorICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihtYXJnaW5Cb3hIZWlnaHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PigwLCBtX2xp
bmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFZl
cnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVudCBu
ZXZlciBjaGFuZ2VzIHRoZSBiYXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBvZiB0
aGUgbGluZSBmdXJ0aGVyIGRvd24uCisgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2lj
YWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7CisgICAgICAgICAg
ICAgICAgLy8gQm90dG9tIGFsaWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMgdGhlIGJhc2VsaW5l
IGZ1cnRoZXIgZG93biBmcm9tIHRoZSBsaW5lIHRvcC4KKyAgICAgICAgICAgICAgICBhdXRvIGxp
bmVMb2dpY2FsSGVpZ2h0ID0gbV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKKyAgICAgICAgICAg
ICAgICBpZiAobWFyZ2luQm94SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94
SGVpZ2h0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFsaWdubWVudEJhc2Vs
aW5lSWZHcmVhdGVyKG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpICsgKG1hcmdpbkJveEhl
aWdodCAtIGxpbmVMb2dpY2FsSGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK0hhbmdpbmdDb250ZW50IExpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhh
bmdpbmdDb250ZW50KElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQpIGNvbnN0Cit7CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IEhhbmdpbmdD
b250ZW50IHsgfTsKKyAgICBpZiAoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJ
c0NvbmRpdGlvbmFsKCk7CisgICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJh
bmdlKG1fcnVucykpIHsKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVu
LmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1
bi5pc0xpbmVCcmVhaygpKSB7CisgICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRp
dGlvbmFsKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
IXJ1bi5oYXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAvLyBDaGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KKyAg
ICAgICAgaWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFw
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFs
IG9yIGNvbmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBo
YW5naW5nQ29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOworICAg
IH0KKyAgICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Cit9CisKK0lubGluZUxheW91dFVuaXQgTGlu
ZUNvbnRlbnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4m
IHJ1bikgY29uc3QKK3sKKyAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRN
ZXRyaWNzKCk7CisgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkKKyAg
ICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgaWYgKHJ1bi5pc0NvbnRh
aW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCisgICAgICAgIHJldHVybiBmb250
TWV0cmljcy5oZWlnaHQoKTsKKworICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3go
KTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKKyAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBs
YXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKKyAgICAgICAgcmV0dXJuIGJveEdlb21l
dHJ5LmNvbnRlbnRCb3hIZWlnaHQoKTsKKworICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94
IChlLmcuIGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRoZWly
IG1hcmdpbiBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KKyAgICBy
ZXR1cm4gYm94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Cit9CisKIHZvaWQgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmxheW91dEluRmxvd0NvbnRlbnQoSW52YWxpZGF0aW9uU3RhdGUmIGlu
dmFsaWRhdGlvblN0YXRlLCBjb25zdCBDb25zdHJhaW50c0ZvckluRmxvd0NvbnRlbnQmIGNvbnN0
cmFpbnRzKQogewogICAgIExPR19XSVRIX1NUUkVBTShGb3JtYXR0aW5nQ29udGV4dExheW91dCwg
c3RyZWFtIDw8ICJbU3RhcnRdIC0+IGlubGluZSBmb3JtYXR0aW5nIGNvbnRleHQgLT4gZm9ybWF0
dGluZyByb290KCIgPDwgJnJvb3QoKSA8PCAiKSIpOwpAQCAtMTM5LDcgKzQ2Niw3IEBAIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQoSW5saW5lSXRlbXMmIGlubGluZUl0
ZW1zLCBMaW5lTGF5b3V0Q29uCiAgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBvdmVyZmxvd0Nv
bnRlbnRMZW5ndGg7CiAgICAgfTsKICAgICBPcHRpb25hbDxQcmV2aW91c0xpbmU+IHByZXZpb3Vz
TGluZTsKLSAgICBhdXRvIGxpbmUgPSBMaW5lQnVpbGRlciB7ICp0aGlzLCByb290KCkuc3R5bGUo
KS50ZXh0QWxpZ24oKSwgTGluZUJ1aWxkZXI6OkludHJpbnNpY1NpemluZzo6Tm8gfTsKKyAgICBh
dXRvIGxpbmUgPSBMaW5lQnVpbGRlciB7ICp0aGlzIH07CiAgICAgYXV0byBsaW5lTGF5b3V0Q29u
dGV4dCA9IExpbmVMYXlvdXRDb250ZXh0IHsgKnRoaXMsIHJvb3QoKSwgaW5saW5lSXRlbXMgfTsK
IAogICAgIHdoaWxlICghbmVlZHNMYXlvdXRSYW5nZS5pc0VtcHR5KCkpIHsKQEAgLTE0OCw5ICs0
NzUsNTUgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJ
dGVtcyYgaW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgLy8gInNwWzwtbGluZSBi
cmVhay0+XWxpdF9jb250ZW50IiAtPiBvdmVyZmxvdyBsZW5ndGg6IDExIC0+IGxlYWRpbmcgcGFy
dGlhbCBjb250ZW50IGxlbmd0aDogMTEuCiAgICAgICAgIGF1dG8gcGFydGlhbExlYWRpbmdDb250
ZW50TGVuZ3RoID0gcHJldmlvdXNMaW5lID8gcHJldmlvdXNMaW5lLT5vdmVyZmxvd0NvbnRlbnRM
ZW5ndGggOiBXVEY6Om51bGxvcHQ7CiAgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lTGF5
b3V0Q29udGV4dC5sYXlvdXRJbmxpbmVDb250ZW50KGxpbmUsIG5lZWRzTGF5b3V0UmFuZ2UsIHBh
cnRpYWxMZWFkaW5nQ29udGVudExlbmd0aCk7CisgICAgICAgIGF1dG8mIGxpbmVCb3ggPSBsaW5l
LmxpbmVCb3goKTsKKyAgICAgICAgYXV0byBsaW5lQ29udGVudFJhbmdlID0gbGluZUNvbnRlbnQu
aW5saW5lSXRlbVJhbmdlOworCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHRlbXBvcmFyeSBh
bmQgd2lsbCBldmVudHVhbGx5IGdldCBtZXJnZWQgdG8gTGluZUJveC4KKyAgICAgICAgYXV0byBh
bGlnbkxpbmVDb250ZW50ID0gWyZdIHsKKyAgICAgICAgICAgIGF1dG8gY29udGVudEFsaWduZXIg
PSBMaW5lQ29udGVudEFsaWduZXIgeyAqdGhpcywgbGluZUJveCwgbGluZS5ydW5zKCksIGxpbmUu
YXZhaWxhYmxlV2lkdGgoKSB9OworICAgICAgICAgICAgY29udGVudEFsaWduZXIuYWRqdXN0QmFz
ZWxpbmVBbmRMaW5lSGVpZ2h0KCk7CisgICAgICAgICAgICBpZiAobGluZS5pc1Zpc3VhbGx5RW1w
dHkoKSkgeworICAgICAgICAgICAgICAgIGxpbmVCb3gucmVzZXRBbGlnbm1lbnRCYXNlbGluZSgp
OworICAgICAgICAgICAgICAgIGxpbmVCb3guc2V0TG9naWNhbEhlaWdodCh7IH0pOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLy8gUmVtb3ZlIGRlc2NlbnQgd2hlbiBhbGwgY29udGVudCBp
cyBiYXNlbGluZSBhbGlnbmVkIGJ1dCBub25lIG9mIHRoZW0gaGF2ZSBkZXNjZW50LgorICAgICAg
ICAgICAgaWYgKHF1aXJrcygpLmxpbmVEZXNjZW50TmVlZHNDb2xsYXBzaW5nKGxpbmUucnVucygp
KSkgeworICAgICAgICAgICAgICAgIGxpbmVCb3guc2hyaW5rVmVydGljYWxseShsaW5lQm94LmFz
Y2VudEFuZERlc2NlbnQoKS5kZXNjZW50KTsKKyAgICAgICAgICAgICAgICBsaW5lQm94LnJlc2V0
RGVzY2VudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGVudEFsaWduZXIuYWxp
Z25WZXJ0aWNhbGx5KCk7CisKKyAgICAgICAgICAgIGF1dG8gaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50ID0gWyZdIHsKKyAgICAgICAgICAgICAgICBpZiAobGluZUNvbnRlbnRSYW5nZS5lbmQg
PT0gbmVlZHNMYXlvdXRSYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBMaW5l
Q29udGVudEFsaWduZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzOworICAgICAg
ICAgICAgICAgIGlmIChsaW5lQ29udGVudC5wYXJ0aWFsQ29udGVudCkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50OjpObzsKKyAgICAgICAgICAgICAgICAvLyBPbWl0IGZsb2F0cyB0byBzZWUgaWYgdGhpcyBp
cyB0aGUgbGFzdCBsaW5lIHdpdGggaW5saW5lIGNvbnRlbnQuCisgICAgICAgICAgICAgICAgZm9y
IChhdXRvIGkgPSBuZWVkc0xheW91dFJhbmdlLmVuZDsgaS0tOykgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlubGluZUl0ZW1zW2ldLmlzRmxvYXQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBpID09IGxpbmVDb250ZW50UmFuZ2UuZW5kIC0gMSA/IExpbmVDb250ZW50QWxp
Z25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMgOiBMaW5lQ29udGVudEFsaWdu
ZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZsb2F0
IGl0ZW0uCisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250
ZW50OjpObzsKKyAgICAgICAgICAgIH0oKTsKKworICAgICAgICAgICAgYXV0byBjb21wdXRlZEhv
cml6b250YWxBbGlnbm1lbnQgPSBbJl0geworICAgICAgICAgICAgICAgIGlmIChyb290KCkuc3R5
bGUoKS50ZXh0QWxpZ24oKSAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gcm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCk7CisgICAgICAgICAgICAg
ICAgLy8gVGV4dCBpcyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVk
IGJ5IHRoZSB0ZXh0LWp1c3RpZnkgcHJvcGVydHksCisgICAgICAgICAgICAgICAgLy8gaW4gb3Jk
ZXIgdG8gZXhhY3RseSBmaWxsIHRoZSBsaW5lIGJveC4gVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZp
ZWQgYnkgdGV4dC1hbGlnbi1sYXN0LAorICAgICAgICAgICAgICAgIC8vIHRoZSBsYXN0IGxpbmUg
YmVmb3JlIGEgZm9yY2VkIGJyZWFrIG9yIHRoZSBlbmQgb2YgdGhlIGJsb2NrIGlzIHN0YXJ0LWFs
aWduZWQuCisgICAgICAgICAgICAgICAgaWYgKGxpbmUucnVucygpLmxhc3QoKS5pc0xpbmVCcmVh
aygpIHx8IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9PSBMaW5lQ29udGVudEFsaWduZXI6
OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6WWVzKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRleHRB
bGlnbk1vZGU6Okp1c3RpZnk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgY29udGVudEFs
aWduZXIuYWxpZ25Ib3Jpem9udGFsbHkoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50KCksIGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgICAgIH07CisKKyAgICAgICAgYWxpZ25M
aW5lQ29udGVudCgpOwogICAgICAgICBzZXREaXNwbGF5Qm94ZXNGb3JMaW5lKGxpbmUsIGxpbmVD
b250ZW50LCBjb25zdHJhaW50cy5ob3Jpem9udGFsKTsKIAotICAgICAgICBhdXRvIGxpbmVDb250
ZW50UmFuZ2UgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtczsKICAgICAgICAgaWYgKCFsaW5lQ29u
dGVudFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQVNTRVJUKG5lZWRzTGF5b3V0UmFu
Z2Uuc3RhcnQgPCBsaW5lQ29udGVudFJhbmdlLmVuZCk7CiAgICAgICAgICAgICBsaW5lTG9naWNh
bFRvcCA9IGxpbmUubGluZUJveCgpLmxvZ2ljYWxCb3R0b20oKTsKQEAgLTI0OCwxNCArNjIxLDE0
IEBAIElubGluZUxheW91dFVuaXQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW50
cmluc2ljV2lkdGhGb3JDb25zdHJhaW50KEluCiB7CiAgICAgYXV0byYgaW5saW5lSXRlbXMgPSBm
b3JtYXR0aW5nU3RhdGUoKS5pbmxpbmVJdGVtcygpOwogICAgIGF1dG8gbWF4aW11bUxpbmVXaWR0
aCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgIGF1dG8gbGluZSA9IExpbmVCdWlsZGVyIHsg
KnRoaXMsIHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpLCBMaW5lQnVpbGRlcjo6SW50cmluc2lj
U2l6aW5nOjpZZXMgfTsKKyAgICBhdXRvIGxpbmUgPSBMaW5lQnVpbGRlciB7ICp0aGlzIH07CiAg
ICAgYXV0byBsaW5lTGF5b3V0Q29udGV4dCA9IExpbmVMYXlvdXRDb250ZXh0IHsgKnRoaXMsIHJv
b3QoKSwgaW5saW5lSXRlbXMgfTsKICAgICBhdXRvIGxheW91dFJhbmdlID0gTGluZUxheW91dENv
bnRleHQ6OklubGluZUl0ZW1SYW5nZSB7IDAgLCBpbmxpbmVJdGVtcy5zaXplKCkgfTsKICAgICB3
aGlsZSAoIWxheW91dFJhbmdlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBPbmx5IHRoZSBob3Jp
enRvbmFsIGF2YWlsYWJsZSB3aWR0aCBpcyBjb25zdHJhaW5lZCB3aGVuIGNvbXB1dGluZyBpbnRy
aW5zaWMgd2lkdGguCiAgICAgICAgIGxpbmUuaW5pdGlhbGl6ZShMaW5lQnVpbGRlcjo6Q29uc3Ry
YWludHMgeyB7IH0sIGF2YWlsYWJsZVdpZHRoLCB7IH0sIGZhbHNlIH0pOwogICAgICAgICBhdXRv
IGxpbmVDb250ZW50ID0gbGluZUxheW91dENvbnRleHQubGF5b3V0SW5saW5lQ29udGVudChsaW5l
LCBsYXlvdXRSYW5nZSwgeyB9KTsKLSAgICAgICAgbGF5b3V0UmFuZ2Uuc3RhcnQgPSBsaW5lQ29u
dGVudC5pbmxpbmVJdGVtcy5lbmQ7CisgICAgICAgIGxheW91dFJhbmdlLnN0YXJ0ID0gbGluZUNv
bnRlbnQuaW5saW5lSXRlbVJhbmdlLmVuZDsKICAgICAgICAgLy8gRklYTUU6IFVzZSBsaW5lIGxv
Z2ljYWwgbGVmdCBhbmQgcmlnaHQgdG8gdGFrZSBmbG9hdHMgaW50byBhY2NvdW50LgogICAgICAg
ICBtYXhpbXVtTGluZVdpZHRoID0gc3RkOjptYXgobWF4aW11bUxpbmVXaWR0aCwgbGluZS5saW5l
Qm94KCkubG9naWNhbFdpZHRoKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dC5oCmluZGV4IDFkYjBmYzRkY2Y2NGJhNjRkZTVlMzMxNWU0MzM3YmVjMTRmOGNlZGMuLjM2NDQ1
NDdiMzBlNGVkNDEzODEzZmFjMWZhYTQyZGYyNTE4YWU2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaApAQCAtOTMsOCArOTMsNiBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgSW5s
aW5lRm9ybWF0dGluZ1N0YXRlJiBmb3JtYXR0aW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBkb3du
Y2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KEZvcm1hdHRpbmdDb250ZXh0Ojpmb3JtYXR0aW5n
U3RhdGUoKSk7IH0KICAgICBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgp
IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRl
eHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQotICAgIC8vIEZJWE1FOiBDb21lIHVwIHdpdGggYSBz
dHJ1Y3R1cmUgdGhhdCByZXF1aXJlcyBubyBmcmllbmRpbmcuCi0gICAgZnJpZW5kIGNsYXNzIExp
bmVCdWlsZGVyOwogfTsKIAogaW5saW5lIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRy
eTo6R2VvbWV0cnkoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRp
bmdDb250ZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1h
dHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCmluZGV4IGU1Yzc5OTZjNjFjNTBjYWM2
ODI1ZDg5OGRlMDFlOTNhYjQzNmVhZDUuLjZmM2Y0ZTJlNWExN2U4YjVjYWUyZjU5ZWFjYjc5MGE0
OWYwYjBhYWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKQEAgLTQzLDMzNyArNDMsOSBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZXNwYWNlUHJlc2VydmVkKGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKICAgICByZXR1cm4gd2hpdGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpQcmUgfHwgd2hp
dGVzcGFjZSA9PSBXaGl0ZVNwYWNlOjpQcmVXcmFwIHx8IHdoaXRlc3BhY2UgPT0gV2hpdGVTcGFj
ZTo6QnJlYWtTcGFjZXM7CiB9CiAKLXN0cnVjdCBIYW5naW5nQ29udGVudCB7Ci1wdWJsaWM6Ci0g
ICAgdm9pZCByZXNldCgpOwotCi0gICAgSW5saW5lTGF5b3V0VW5pdCB3aWR0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fd2lkdGg7IH0KLSAgICBib29sIGlzQ29uZGl0aW9uYWwoKSBjb25zdCB7IHJldHVy
biBtX2lzQ29uZGl0aW9uYWw7IH0KLQotICAgIHZvaWQgc2V0SXNDb25kaXRpb25hbCgpIHsgbV9p
c0NvbmRpdGlvbmFsID0gdHJ1ZTsgfQotICAgIHZvaWQgZXhwYW5kKElubGluZUxheW91dFVuaXQg
d2lkdGgpIHsgbV93aWR0aCArPSB3aWR0aDsgfQotCi1wcml2YXRlOgotICAgIGJvb2wgbV9pc0Nv
bmRpdGlvbmFsIHsgZmFsc2UgfTsKLSAgICBJbmxpbmVMYXlvdXRVbml0IG1fd2lkdGggeyAwIH07
Ci19OwotCi12b2lkIEhhbmdpbmdDb250ZW50OjpyZXNldCgpCi17Ci0gICAgbV9pc0NvbmRpdGlv
bmFsID0gZmFsc2U7Ci0gICAgbV93aWR0aCA9ICAwOwotfQotCi1jbGFzcyBMaW5lQ29udGVudEFs
aWduZXIgewotcHVibGljOgotICAgIExpbmVDb250ZW50QWxpZ25lcihjb25zdCBJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dCYsIExpbmVCb3gmLCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYsIElubGluZUxh
eW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwotCi0gICAgdm9pZCBhbGlnbkhvcml6b250YWxseShU
ZXh0QWxpZ25Nb2RlLCBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsK
LSAgICB2b2lkIGFsaWduVmVydGljYWxseSgpOwotICAgIHZvaWQgYWRqdXN0QmFzZWxpbmVBbmRM
aW5lSGVpZ2h0KCk7Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBqdXN0aWZ5UnVucyhJbmxpbmVMYXlv
dXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKLSAgICBIYW5naW5nQ29udGVudCBjb2xsZWN0SGFuZ2lu
Z0NvbnRlbnQoTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3Q7
Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVy
OjpSdW4mKSBjb25zdDsKLQotICAgIGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3Jt
YXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7
IH0KLSAgICBMYXlvdXRTdGF0ZSYgbGF5b3V0U3RhdGUoKSBjb25zdCB7IHJldHVybiBmb3JtYXR0
aW5nQ29udGV4dCgpLmxheW91dFN0YXRlKCk7IH0KLQotICAgIGNvbnN0IElubGluZUZvcm1hdHRp
bmdDb250ZXh0JiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0OwotICAgIExpbmVCb3gmIG1fbGlu
ZUJveDsKLSAgICBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgbV9ydW5zOwotICAgIElubGluZUxheW91
dFVuaXQgbV9hdmFpbGFibGVXaWR0aDsKLX07Ci0KLUxpbmVDb250ZW50QWxpZ25lcjo6TGluZUNv
bnRlbnRBbGlnbmVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0
aW5nQ29udGV4dCwgTGluZUJveCYgbGluZUJveCwgTGluZUJ1aWxkZXI6OlJ1bkxpc3QmIHJ1bnMs
IElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCi0gICAgOiBtX2lubGluZUZvcm1hdHRp
bmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQotICAgICwgbV9saW5lQm94KGxpbmVC
b3gpCi0gICAgLCBtX3J1bnMocnVucykKLSAgICAsIG1fYXZhaWxhYmxlV2lkdGgoYXZhaWxhYmxl
V2lkdGgpCi17Ci19Ci0KLXZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250YWxs
eShUZXh0QWxpZ25Nb2RlIGhvcml6b250YWxBbGlnbm1lbnQsIExpbmVCdWlsZGVyOjpJc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZSkKLXsKLSAgICBhdXRvIGhhbmdpbmdDb250
ZW50ID0gY29sbGVjdEhhbmdpbmdDb250ZW50KGlzTGFzdExpbmUpOwotICAgIGF1dG8gYXZhaWxh
YmxlV2lkdGggPSBtX2F2YWlsYWJsZVdpZHRoICsgaGFuZ2luZ0NvbnRlbnQud2lkdGgoKTsKLSAg
ICBpZiAobV9ydW5zLmlzRW1wdHkoKSB8fCBhdmFpbGFibGVXaWR0aCA8PSAwKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoaG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpK
dXN0aWZ5KSB7Ci0gICAgICAgIGp1c3RpZnlSdW5zKGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gYWRqdXN0bWVudEZvckFsaWdubWVudCA9IFsmXSAo
YXV0byBhdmFpbGFibGVXaWR0aCkgLT4gT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gewotICAg
ICAgICBzd2l0Y2ggKGhvcml6b250YWxBbGlnbm1lbnQpIHsKLSAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpMZWZ0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OldlYktpdExlZnQ6Ci0g
ICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6U3RhcnQ6Ci0gICAgICAgICAgICByZXR1cm4geyB9
OwotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OlJpZ2h0OgotICAgICAgICBjYXNlIFRleHRB
bGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkVuZDoK
LSAgICAgICAgICAgIHJldHVybiBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVX
aWR0aCwgMCk7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6Q2VudGVyOgotICAgICAgICBj
YXNlIFRleHRBbGlnbk1vZGU6OldlYktpdENlbnRlcjoKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om1heDxJbmxpbmVMYXlvdXRVbml0PihhdmFpbGFibGVXaWR0aCAvIDIsIDApOwotICAgICAgICBj
YXNlIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4geyB9OwotICAgIH07Ci0KLSAgICBhdXRvIGFkanVz
dG1lbnQgPSBhZGp1c3RtZW50Rm9yQWxpZ25tZW50KGF2YWlsYWJsZVdpZHRoKTsKLSAgICBpZiAo
IWFkanVzdG1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBIb3Jpem9udGFsIGFsaWdubWVu
dCBtZWFucyB0aGF0IHdlIG5vdCBvbmx5IGFkanVzdCB0aGUgcnVucyBidXQgYWxzbyBtYWtlIHN1
cmUKLSAgICAvLyB0aGF0IHRoZSBsaW5lIGJveCBpcyBhbGlnbmVkIGFzIHdlbGwKLSAgICAvLyBl
LmcuIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgd2lkdGg6IDEwMHB4OyI+Y2VudGVy
ZWQgdGV4dDwvZGl2PiA6IHRoZSBsaW5lIGJveCB3aWxsIGFsc28gYmUgY2VudGVyZWQKLSAgICAv
LyBhcyBvcHBvc2VkIHRvIHN0YXJ0IGF0IDBweCBhbGwgdGhlIHdheSB0byBbY2VudGVyZWQgdGV4
dF0gcnVuJ3MgcmlnaHQgZWRnZS4KLSAgICBtX2xpbmVCb3gubW92ZUhvcml6b250YWxseSgqYWRq
dXN0bWVudCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpCi0gICAgICAgIHJ1bi5tb3Zl
SG9yaXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLX0KLQotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6
OmFsaWduVmVydGljYWxseSgpCi17Ci0gICAgYXV0byBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0ID0g
bV9saW5lQm94LmxvZ2ljYWxSZWN0KCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsK
LSAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAg
IGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byB2ZXJ0aWNh
bEFsaWduID0gbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOwotICAgICAgICBhdXRv
IGFzY2VudCA9IGxheW91dEJveC5zdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7Ci0KLSAg
ICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWduKSB7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGln
bjo6QmFzZWxpbmU6Ci0gICAgICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkgfHwgcnVuLmlz
VGV4dCgpKQotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50
QmFzZWxpbmUoKSAtIGFzY2VudDsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5l
clN0YXJ0KCkpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBs
b2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkgLSBhc2NlbnQgLSBib3hH
ZW9tZXRyeS5ib3JkZXJUb3AoKSAtIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OwotICAgICAgICAgICAgfSBlbHNlIGlmIChsYXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYm
IGxheW91dEJveC5lc3RhYmxpc2hlc0lubGluZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAg
ICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRTdGF0ZSgpLmVzdGFibGlz
aGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5lckJveD4obGF5b3V0Qm94
KSk7Ci0gICAgICAgICAgICAgICAgLy8gU3BlYyBtYWtlcyB1cyBnZW5lcmF0ZSBhdCBsZWFzdCBv
bmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAgICBhdXRvIGlubGlu
ZUJsb2NrQmFzZWxpbmUgPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNvbnRlbnQoKS0+
bGluZUJveGVzLmxhc3QoKS5iYXNlbGluZSgpOwotICAgICAgICAgICAgICAgIC8vIFRoZSBpbmxp
bmUtYmxvY2sncyBiYXNlbGluZSBvZmZzZXQgaXMgcmVsYXRpdmUgdG8gaXRzIGNvbnRlbnQgYm94
LiBMZXQncyBjb252ZXJ0IGl0IHJlbGF0aXZlIHRvIHRoZSBtYXJnaW4gYm94LgotICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgICBfX19fX19fX19fX19fX18gPC0gbWFyZ2luIGJveAotICAgICAg
ICAgICAgICAgIC8vICAgICAgICAgIHwKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8ICBf
X19fX19fX19fX18gIDwtIGJvcmRlciBib3gKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8
IHwKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwgIF9fX19fX19fXyAgPC0gY29udGVu
dCBib3gKLSAgICAgICAgICAgICAgICAvLyAgICAgICAgICB8IHwgfCAgIF4KLSAgICAgICAgICAg
ICAgICAvLyAgICAgICAgICB8IHwgfCAgIHwgIDwtIGJhc2VsaW5lIG9mZnNldAotICAgICAgICAg
ICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAgfAotICAgICAgICAgICAgICAgIC8vICAgICB0ZXh0
IHwgfCB8ICAgdiB0ZXh0Ci0gICAgICAgICAgICAgICAgLy8gICAgIC0tLS0tfC18LXwtLS0tLS0t
LS0tIDwtIGJhc2VsaW5lCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KTsKLSAgICAgICAgICAgICAgICBhdXRvIGJhc2VsaW5lRnJvbU1hcmdpbkJveCA9IGJveEdl
b21ldHJ5Lm1hcmdpbkJlZm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9t
ZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGlubGluZUJsb2NrQmFzZWxpbmU7Ci0gICAg
ICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0g
YmFzZWxpbmVGcm9tTWFyZ2luQm94OwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFs
aWdubWVudEJhc2VsaW5lKCkgLSAoYm94R2VvbWV0cnkudmVydGljYWxCb3JkZXIoKSArIGJveEdl
b21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMF9sdSkgKyBydW4ubG9naWNhbFJlY3Qo
KS5oZWlnaHQoKSArIGJveEdlb21ldHJ5Lm1hcmdpbkFmdGVyKCkpOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IDBfbHU7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9s
aW5lQm94LmxvZ2ljYWxCb3R0b20oKSAtIHJ1bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9U
X0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgcnVuLmFkanVzdExvZ2ljYWxUb3AobG9naWNhbFRvcCk7Ci0gICAgICAgIC8vIEFkanVzdCBz
Y3JvbGxhYmxlIG92ZXJmbG93IGlmIHRoZSBydW4gb3ZlcmZsb3dzIHRoZSBsaW5lLgotICAgICAg
ICBzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0LmV4cGFuZFZlcnRpY2FsbHlUb0NvbnRhaW4ocnVuLmxv
Z2ljYWxSZWN0KCkpOwotICAgICAgICAvLyBDb252ZXJ0IHJ1bnMgZnJvbSByZWxhdGl2ZSB0byB0
aGUgbGluZSB0b3AvbGVmdCB0byB0aGUgZm9ybWF0dGluZyByb290J3MgYm9yZGVyIGJveCB0b3Av
bGVmdC4KLSAgICAgICAgcnVuLm1vdmVWZXJ0aWNhbGx5KG1fbGluZUJveC5sb2dpY2FsVG9wKCkp
OwotICAgICAgICBydW4ubW92ZUhvcml6b250YWxseShtX2xpbmVCb3gubG9naWNhbExlZnQoKSk7
Ci0gICAgfQotICAgIG1fbGluZUJveC5zZXRTY3JvbGxhYmxlT3ZlcmZsb3coc2Nyb2xsYWJsZU92
ZXJmbG93UmVjdCk7Ci19Ci0KLXZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyhJ
bmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKQotewotICAgIEFTU0VSVChhdmFpbGFibGVX
aWR0aCA+IDApOwotICAgIC8vIENvbGxlY3QgdGhlIGV4cGFuc2lvbiBvcHBvcnR1bml0eSBudW1i
ZXJzIGFuZCBmaW5kIHRoZSBsYXN0IHJ1biB3aXRoIGNvbnRlbnQuCi0gICAgYXV0byBleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50ID0gMDsKLSAgICBMaW5lQnVpbGRlcjo6UnVuKiBsYXN0UnVuV2l0
aENvbnRlbnQgPSBudWxscHRyOwotICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAg
ICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKz0gcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQoKTsKLSAgICAgICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNCb3goKSkKLSAgICAg
ICAgICAgIGxhc3RSdW5XaXRoQ29udGVudCA9ICZydW47Ci0gICAgfQotICAgIC8vIE5lZWQgdG8g
Zml4IHVwIHRoZSBsYXN0IHJ1bidzIHRyYWlsaW5nIGV4cGFuc2lvbi4KLSAgICBpZiAobGFzdFJ1
bldpdGhDb250ZW50ICYmIGxhc3RSdW5XaXRoQ29udGVudC0+aGFzRXhwYW5zaW9uT3Bwb3J0dW5p
dHkoKSkgewotICAgICAgICAvLyBUdXJuIG9mZiB0aGUgdHJhaWxpbmcgYml0cyBmaXJzdCBhbmQg
YWRkIHRoZSBmb3JiaWQgdHJhaWxpbmcgZXhwYW5zaW9uLgotICAgICAgICBhdXRvIGxlZnRFeHBh
bnNpb24gPSBsYXN0UnVuV2l0aENvbnRlbnQtPmV4cGFuc2lvbkJlaGF2aW9yKCkgJiBMZWZ0RXhw
YW5zaW9uTWFzazsKLSAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50LT5zZXRFeHBhbnNpb25CZWhh
dmlvcihsZWZ0RXhwYW5zaW9uIHwgRm9yYmlkUmlnaHRFeHBhbnNpb24pOwotICAgIH0KLSAgICAv
LyBOb3RoaW5nIHRvIGRpc3RyaWJ1dGU/Ci0gICAgaWYgKCFleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KQotICAgICAgICByZXR1cm47Ci0gICAgLy8gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2Uu
Ci0gICAgYXV0byBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUgPSBhdmFpbGFibGVXaWR0aCAvIGV4cGFu
c2lvbk9wcG9ydHVuaXR5Q291bnQ7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBhY2N1bXVsYXRlZEV4
cGFuc2lvbiA9IDA7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMpIHsKLSAgICAgICAgLy8g
RXhwYW5kIGFuZCBtb3ZlcyBydW5zIGJ5IHRoZSBhY2N1bXVsYXRlZCBleHBhbnNpb24uCi0gICAg
ICAgIGlmICghcnVuLmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKLSAgICAgICAgICAgIHJ1
bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5zaW9uKTsKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VSVChydW4uZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudCgpKTsKLSAgICAgICAgYXV0byBjb21wdXRlZEV4cGFuc2lvbiA9IGV4cGFuc2lvblRv
RGlzdHJpYnV0ZSAqIHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7Ci0gICAgICAgIHJ1
bi5zZXRDb21wdXRlZEhvcml6b250YWxFeHBhbnNpb24oY29tcHV0ZWRFeHBhbnNpb24pOwotICAg
ICAgICBydW4ubW92ZUhvcml6b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAg
IGFjY3VtdWxhdGVkRXhwYW5zaW9uICs9IGNvbXB1dGVkRXhwYW5zaW9uOwotICAgIH0KLX0KLQot
dm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCgpCi17
Ci0gICAgdW5zaWduZWQgaW5saW5lQ29udGFpbmVyTmVzdGluZ0xldmVsID0gMDsKLSAgICBhdXRv
IGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWsgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIHJ1
biA6IG1fcnVucykgewotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7
Ci0gICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7Ci0KLSAgICAgICAgcnVu
LnNldExvZ2ljYWxIZWlnaHQocnVuQ29udGVudEhlaWdodChydW4pKTsKLQotICAgICAgICBpZiAo
cnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBpZiAoaW5s
aW5lQ29udGFpbmVyTmVzdGluZ0xldmVsKSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UndmUgYWxy
ZWFkeSBhZGp1c3RlZCB0aGUgbGluZSBoZWlnaHQvYmFzZWxpbmUgdGhyb3VnaCB0aGUgcGFyZW50
IGlubGluZSBjb250YWluZXIuIAotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5lQnJlYWspIHsKLSAg
ICAgICAgICAgICAgICAvLyBlLmcgZGl2PmZpcnN0IHRleHQ8L2Rpdj4gb3IgPGRpdj48c3Bhbj5u
ZXN0ZWQ8c3Bhbj5maXJzdCBkaXJlY3QgdGV4dDwvZGl2Pi4KLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGhhc1NlZW5EaXJlY3RUZXh0T3JMaW5l
QnJlYWsgPSB0cnVlOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgKytpbmxpbmVDb250
YWluZXJOZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICAvLyBJbmxpbmUgY29udGFpbmVycyBzdHJl
dGNoIHRoZSBsaW5lIGJ5IHRoZWlyIGZvbnQgc2l6ZS4KLSAgICAgICAgICAgIC8vIFZlcnRpY2Fs
IG1hcmdpbnMsIHBhZGRpbmdzIGFuZCBib3JkZXJzIGRvbid0IGNvbnRyaWJ1dGUgdG8gdGhlIGxp
bmUgaGVpZ2h0LgotICAgICAgICAgICAgYXV0byYgZm9udE1ldHJpY3MgPSBzdHlsZS5mb250TWV0
cmljcygpOwotICAgICAgICAgICAgaWYgKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSA9PSBWZXJ0aWNh
bEFsaWduOjpCYXNlbGluZSkgewotICAgICAgICAgICAgICAgIGF1dG8gaGFsZkxlYWRpbmcgPSBM
aW5lQnVpbGRlcjo6aGFsZkxlYWRpbmdNZXRyaWNzKGZvbnRNZXRyaWNzLCBzdHlsZS5jb21wdXRl
ZExpbmVIZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gQm90aCBoYWxmbGVhZGluZyBhc2Nl
bnQgYW5kIGRlc2NlbnQgY291bGQgYmUgbmVnYXRpdmUgKHRhbGwgZm9udCB2cy4gc21hbGwgbGlu
ZS1oZWlnaHQgdmFsdWUpCi0gICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmRlc2NlbnQg
PiAwKQotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0RGVzY2VudElmR3JlYXRlciho
YWxmTGVhZGluZy5kZXNjZW50KTsKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxlYWRpbmcuYXNj
ZW50ID4gMCkKLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2VudElmR3JlYXRl
cihoYWxmTGVhZGluZy5hc2NlbnQpOwotICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0SWZHcmVhdGVyKG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuaGVpZ2h0KCkp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2lj
YWxIZWlnaHRJZkdyZWF0ZXIoZm9udE1ldHJpY3MuaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsK
LSAgICAgICAgICAgIC8vIFRoZSBsaW5lJ3MgYmFzZWxpbmUgYW5kIGhlaWdodCBoYXZlIGFscmVh
ZHkgYmVlbiBhZGp1c3RlZCBhdCBDb250YWluZXJTdGFydC4KLSAgICAgICAgICAgIEFTU0VSVChp
bmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpOwotICAgICAgICAgICAgLS1pbmxpbmVDb250YWlu
ZXJOZXN0aW5nTGV2ZWw7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGlmIChydW4uaXNCb3goKSkgewotICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7Ci0gICAgICAgICAg
ICBhdXRvIG1hcmdpbkJveEhlaWdodCA9IGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpOwot
Ci0gICAgICAgICAgICBzd2l0Y2ggKHN0eWxlLnZlcnRpY2FsQWxpZ24oKSkgewotICAgICAgICAg
ICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAgICAgICAgICAgICAgIGlmIChs
YXlvdXRCb3guaXNJbmxpbmVCbG9ja0JveCgpICYmIGxheW91dEJveC5lc3RhYmxpc2hlc0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW5saW5lLWJs
b2NrcyB3aXRoIGlubGluZSBjb250ZW50IGFsd2F5cyBoYXZlIGJhc2VsaW5lcy4KLSAgICAgICAg
ICAgICAgICAgICAgYXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxp
c2hlZElubGluZUZvcm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJv
eCkpOwotICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBoYXMgdG8gYmUgYXQgbGVhc3Qgb25l
IGxpbmUgLWV2ZW4gaWYgaXQgaXMgZW1wdHkuCi0gICAgICAgICAgICAgICAgICAgIGF1dG8mIGxh
c3RMaW5lQm94ID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVC
b3hlcy5sYXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8gYmVmb3JlSGVpZ2h0ID0gYm94
R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdl
b21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwotICAgICAgICAgICAgICAgICAgICBtX2xp
bmVCb3guc2V0QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIoYmVmb3JlSGVpZ2h0ICsgbGFzdExp
bmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gTm9uIGlubGluZS1ibG9jayBib3hlcyBzaXQg
b24gdGhlIGJhc2VsaW5lIChpbmNsdWRpbmcgdGhlaXIgYm90dG9tIG1hcmdpbikuCi0gICAgICAg
ICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0
KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIG5lZ2F0aXZlIGRlc2NlbnQgKHllcywg
bmVnYXRpdmUgZGVzY2VudCBpcyBhIHRoaW5nKS4KLSAgICAgICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0ICsgc3RkOjptYXg8
SW5saW5lTGF5b3V0VW5pdD4oMCwgbV9saW5lQm94LmFzY2VudEFuZERlc2NlbnQoKS5kZXNjZW50
KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICAg
ICAgLy8gVG9wIGFsaWduIGNvbnRlbnQgbmV2ZXIgY2hhbmdlcyB0aGUgYmFzZWxpbmUsIGl0IG9u
bHkgcHVzaGVzIHRoZSBib3R0b20gb2YgdGhlIGxpbmUgZnVydGhlciBkb3duLgotICAgICAgICAg
ICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdo
dCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OkJvdHRvbTogewotICAgICAgICAgICAgICAgIC8vIEJvdHRvbSBhbGlnbmVkLCB0YWxsIGNv
bnRlbnQgcHVzaGVzIHRoZSBiYXNlbGluZSBmdXJ0aGVyIGRvd24gZnJvbSB0aGUgbGluZSB0b3Au
Ci0gICAgICAgICAgICAgICAgYXV0byBsaW5lTG9naWNhbEhlaWdodCA9IG1fbGluZUJveC5sb2dp
Y2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKG1hcmdpbkJveEhlaWdodCA+IGxpbmVM
b2dpY2FsSGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2Fs
SGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
bGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihtX2xpbmVCb3guYWxpZ25tZW50
QmFzZWxpbmUoKSArIChtYXJnaW5Cb3hIZWlnaHQgLSBsaW5lTG9naWNhbEhlaWdodCkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRF
RF9ZRVQoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgfQotfQotCi1IYW5naW5nQ29udGVudCBMaW5l
Q29udGVudEFsaWduZXI6OmNvbGxlY3RIYW5naW5nQ29udGVudChMaW5lQnVpbGRlcjo6SXNMYXN0
TGluZVdpdGhJbmxpbmVDb250ZW50IGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3QK
LXsKLSAgICBhdXRvIGhhbmdpbmdDb250ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OwotICAgIGlm
IChpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgPT0gTGluZUJ1aWxkZXI6OklzTGFzdExpbmVX
aXRoSW5saW5lQ29udGVudDo6WWVzKQotICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRp
dGlvbmFsKCk7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBXVEY6Om1ha2VSZXZlcnNlZFJhbmdlKG1f
cnVucykpIHsKLSAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0YXJ0KCkgfHwgcnVuLmlzQ29u
dGFpbmVyRW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJ1bi5pc0xp
bmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBoYW5naW5nQ29udGVudC5zZXRJc0NvbmRpdGlvbmFs
KCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXJ1bi5o
YXNUcmFpbGluZ1doaXRlc3BhY2UoKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvLyBD
aGVjayBpZiB3ZSBoYXZlIGEgcHJlc2VydmVkIG9yIGh1bmcgd2hpdGVzcGFjZS4KLSAgICAgICAg
aWYgKHJ1bi5zdHlsZSgpLndoaXRlU3BhY2UoKSAhPSBXaGl0ZVNwYWNlOjpQcmVXcmFwKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIC8vIFRoaXMgaXMgZWl0aGVyIGEgbm9ybWFsIG9yIGNv
bmRpdGlvbmFsbHkgaGFuZ2luZyB0cmFpbGluZyB3aGl0ZXNwYWNlLgotICAgICAgICBoYW5naW5n
Q29udGVudC5leHBhbmQocnVuLnRyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gaGFuZ2luZ0NvbnRlbnQ7Ci19Ci0KLUlubGluZUxheW91dFVuaXQgTGluZUNvbnRl
bnRBbGlnbmVyOjpydW5Db250ZW50SGVpZ2h0KGNvbnN0IExpbmVCdWlsZGVyOjpSdW4mIHJ1bikg
Y29uc3QKLXsKLSAgICBhdXRvJiBmb250TWV0cmljcyA9IHJ1bi5zdHlsZSgpLmZvbnRNZXRyaWNz
KCk7Ci0gICAgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJlYWsoKSkKLSAgICAgICAg
cmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgaWYgKHJ1bi5pc0NvbnRhaW5lclN0
YXJ0KCkgfHwgcnVuLmlzQ29udGFpbmVyRW5kKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmlj
cy5oZWlnaHQoKTsKLQotICAgIGF1dG8mIGxheW91dEJveCA9IHJ1bi5sYXlvdXRCb3goKTsKLSAg
ICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3go
bGF5b3V0Qm94KTsKLSAgICBpZiAobGF5b3V0Qm94LmlzUmVwbGFjZWRCb3goKSB8fCBsYXlvdXRC
b3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAgcmV0dXJuIGJveEdlb21ldHJ5LmNv
bnRlbnRCb3hIZWlnaHQoKTsKLQotICAgIC8vIE5vbi1yZXBsYWNlZCBpbmxpbmUgYm94IChlLmcu
IGlubGluZS1ibG9jaykuIEl0IGxvb2tzIGEgYml0IG1pc2xlYWRpbmcgYnV0IHRoZWlyIG1hcmdp
biBib3ggaXMgY29uc2lkZXJlZCB0aGUgY29udGVudCBoZWlnaHQgaGVyZS4KLSAgICByZXR1cm4g
Ym94R2VvbWV0cnkubWFyZ2luQm94SGVpZ2h0KCk7Ci19Ci0KLUxpbmVCdWlsZGVyOjpMaW5lQnVp
bGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQsIE9wdGlvbmFsPFRleHRBbGlnbk1vZGU+IGhvcml6b250YWxBbGlnbm1lbnQsIEludHJpbnNp
Y1NpemluZyBpbnRyaW5zaWNTaXppbmcpCitMaW5lQnVpbGRlcjo6TGluZUJ1aWxkZXIoY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1hdHRpbmdDb250ZXh0KQogICAgIDog
bV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4dChpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCkKICAgICAs
IG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50KG1fcnVucykKLSAgICAsIG1faG9yaXpvbnRhbEFs
aWdubWVudChob3Jpem9udGFsQWxpZ25tZW50KQotICAgICwgbV9pc0ludHJpbnNpY1NpemluZyhp
bnRyaW5zaWNTaXppbmcgPT0gSW50cmluc2ljU2l6aW5nOjpZZXMpCiAgICAgLCBtX3Nob3VsZEln
bm9yZVRyYWlsaW5nTGV0dGVyU3BhY2luZyhSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpCiB7
CiB9CkBAIC00MDUsNyArNzcsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpjbGVhcigpCiAgICAgbV9s
aW5lSXNWaXN1YWxseUVtcHR5QmVmb3JlVHJpbW1hYmxlVHJhaWxpbmdDb250ZW50ID0geyB9Owog
fQogCi12b2lkIExpbmVCdWlsZGVyOjpjbG9zZShJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQg
aXNMYXN0TGluZSkKK3ZvaWQgTGluZUJ1aWxkZXI6OmNsb3NlKCkKIHsKICNpZiBBU1NFUlRfRU5B
QkxFRAogICAgIG1faXNDbG9zZWQgPSB0cnVlOwpAQCAtNDE0LDM0ICs4Niw2IEBAIHZvaWQgTGlu
ZUJ1aWxkZXI6OmNsb3NlKElzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQog
ICAgIC8vIDIuIEFsaWduIG1lcmdlZCBydW5zIGJvdGggdmVydGljYWxseSBhbmQgaG9yaXpvbnRh
bGx5LgogICAgIHJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpOwogICAgIHZpc3VhbGx5
Q29sbGFwc2VQcmVXcmFwT3ZlcmZsb3dDb250ZW50KCk7Ci0gICAgaWYgKG1faXNJbnRyaW5zaWNT
aXppbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIGF1dG8gY29udGVudEFsaWduZXIgPSBMaW5l
Q29udGVudEFsaWduZXIgeyBmb3JtYXR0aW5nQ29udGV4dCgpLCBtX2xpbmVCb3gsIG1fcnVucywg
YXZhaWxhYmxlV2lkdGgoKSB9OwotICAgIGNvbnRlbnRBbGlnbmVyLmFkanVzdEJhc2VsaW5lQW5k
TGluZUhlaWdodCgpOwotICAgIGlmIChpc1Zpc3VhbGx5RW1wdHkoKSkgewotICAgICAgICBtX2xp
bmVCb3gucmVzZXRBbGlnbm1lbnRCYXNlbGluZSgpOwotICAgICAgICBtX2xpbmVCb3guc2V0TG9n
aWNhbEhlaWdodCh7IH0pOwotICAgIH0KLSAgICAvLyBSZW1vdmUgZGVzY2VudCB3aGVuIGFsbCBj
b250ZW50IGlzIGJhc2VsaW5lIGFsaWduZWQgYnV0IG5vbmUgb2YgdGhlbSBoYXZlIGRlc2NlbnQu
Ci0gICAgaWYgKGZvcm1hdHRpbmdDb250ZXh0KCkucXVpcmtzKCkubGluZURlc2NlbnROZWVkc0Nv
bGxhcHNpbmcobV9ydW5zKSkgewotICAgICAgICBtX2xpbmVCb3guc2hyaW5rVmVydGljYWxseSht
X2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpOwotICAgICAgICBtX2xpbmVCb3gu
cmVzZXREZXNjZW50KCk7Ci0gICAgfQotICAgIGNvbnRlbnRBbGlnbmVyLmFsaWduVmVydGljYWxs
eSgpOwotCi0gICAgYXV0byBjb21wdXRlZEhvcml6b250YWxBbGlnbm1lbnQgPSBbJl0gewotICAg
ICAgICBBU1NFUlQobV9ob3Jpem9udGFsQWxpZ25tZW50KTsKLSAgICAgICAgaWYgKG1faG9yaXpv
bnRhbEFsaWdubWVudCAhPSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5KQotICAgICAgICAgICAgcmV0
dXJuICptX2hvcml6b250YWxBbGlnbm1lbnQ7Ci0gICAgICAgIC8vIFRleHQgaXMganVzdGlmaWVk
IGFjY29yZGluZyB0byB0aGUgbWV0aG9kIHNwZWNpZmllZCBieSB0aGUgdGV4dC1qdXN0aWZ5IHBy
b3BlcnR5LAotICAgICAgICAvLyBpbiBvcmRlciB0byBleGFjdGx5IGZpbGwgdGhlIGxpbmUgYm94
LiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBieSB0ZXh0LWFsaWduLWxhc3QsCi0gICAgICAg
IC8vIHRoZSBsYXN0IGxpbmUgYmVmb3JlIGEgZm9yY2VkIGJyZWFrIG9yIHRoZSBlbmQgb2YgdGhl
IGJsb2NrIGlzIHN0YXJ0LWFsaWduZWQuCi0gICAgICAgIGlmIChtX3J1bnMubGFzdCgpLmlzTGlu
ZUJyZWFrKCkgfHwgaXNMYXN0TGluZSA9PSBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50OjpZZXMpCi0gICAgICAgICAgICByZXR1cm4gVGV4dEFsaWduTW9kZTo6U3RhcnQ7
Ci0gICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5OwotICAgIH07Ci0gICAgY29u
dGVudEFsaWduZXIuYWxpZ25Ib3Jpem9udGFsbHkoY29tcHV0ZWRIb3Jpem9udGFsQWxpZ25tZW50
KCksIGlzTGFzdExpbmUpOwogfQogCiB2b2lkIExpbmVCdWlsZGVyOjpyZW1vdmVUcmFpbGluZ1Ry
aW1tYWJsZUNvbnRlbnQoKQpAQCAtNDUyLDEwICs5NiwxMCBAQCB2b2lkIExpbmVCdWlsZGVyOjpy
ZW1vdmVUcmFpbGluZ1RyaW1tYWJsZUNvbnRlbnQoKQogICAgIC8vIENvbXBsZXggbGluZSBsYXlv
dXQgcXVpcms6IGtlZXAgdGhlIHRyYWlsaW5nIHdoaXRlc3BhY2UgYXJvdW5kIHdoZW4gaXQgaXMg
Zm9sbG93ZWQgYnkgYSBsaW5lIGJyZWFrLCB1bmxlc3MgdGhlIGNvbnRlbnQgb3ZlcmZsb3dzIHRo
ZSBsaW5lLgogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LmxheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkKCkpIHsKICAgICAgICAg
YXV0byBpc1RleHRBbGlnblJpZ2h0ID0gWyZdIHsKLSAgICAgICAgICAgIEFTU0VSVChtX2hvcml6
b250YWxBbGlnbm1lbnQpOwotICAgICAgICAgICAgcmV0dXJuIG1faG9yaXpvbnRhbEFsaWdubWVu
dCA9PSBUZXh0QWxpZ25Nb2RlOjpSaWdodAotICAgICAgICAgICAgICAgIHx8IG1faG9yaXpvbnRh
bEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodAotICAgICAgICAgICAgICAg
IHx8IG1faG9yaXpvbnRhbEFsaWdubWVudCA9PSBUZXh0QWxpZ25Nb2RlOjpFbmQ7CisgICAgICAg
ICAgICBhdXRvIHRleHRBbGlnbiA9IGZvcm1hdHRpbmdDb250ZXh0KCkucm9vdCgpLnN0eWxlKCku
dGV4dEFsaWduKCk7CisgICAgICAgICAgICByZXR1cm4gdGV4dEFsaWduID09IFRleHRBbGlnbk1v
ZGU6OlJpZ2h0CisgICAgICAgICAgICAgICAgfHwgdGV4dEFsaWduID09IFRleHRBbGlnbk1vZGU6
OldlYktpdFJpZ2h0CisgICAgICAgICAgICAgICAgfHwgdGV4dEFsaWduID09IFRleHRBbGlnbk1v
ZGU6OkVuZDsKICAgICAgICAgICAgIH0oKTsKIAogICAgICAgICBpZiAobV9ydW5zLmxhc3QoKS5p
c0xpbmVCcmVhaygpICYmIGF2YWlsYWJsZVdpZHRoKCkgPj0gMCAmJiAhaXNUZXh0QWxpZ25SaWdo
dCkgewpAQCAtNzAzLDExICszNDcsNyBAQCBib29sIExpbmVCdWlsZGVyOjppc1Zpc3VhbGx5Tm9u
RW1wdHkoY29uc3QgUnVuJiBydW4pIGNvbnN0CiAgICAgICAgIGlmIChydW4ubGF5b3V0Qm94KCku
aXNSZXBsYWNlZEJveCgpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIEFTU0VS
VChydW4ubGF5b3V0Qm94KCkuaXNJbmxpbmVCbG9ja0JveCgpIHx8IHJ1bi5sYXlvdXRCb3goKS5p
c0lubGluZVRhYmxlQm94KCkpOwotICAgICAgICBpZiAoIXJ1bi5sb2dpY2FsV2lkdGgoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKG1faXNJbnRyaW5zaWNTaXppbmcg
fHwgZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChydW4ubGF5b3V0Qm94KCkpLmhl
aWdodCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIHJ1bi5sb2dpY2FsV2lkdGgoKTsKICAgICB9CiAKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTg5NCw3ICs1MzQsNyBAQCB2b2lkIExpbmVCdWlsZGVyOjpSdW46
OnNldEV4cGFuc2lvbkJlaGF2aW9yKEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9y
KQogICAgIG1fZXhwYW5zaW9uLmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3I7CiB9CiAKLWlu
bGluZSBFeHBhbnNpb25CZWhhdmlvciBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25CZWhhdmlv
cigpIGNvbnN0CitFeHBhbnNpb25CZWhhdmlvciBMaW5lQnVpbGRlcjo6UnVuOjpleHBhbnNpb25C
ZWhhdmlvcigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVGV4dCgpKTsKICAgICByZXR1cm4gbV9l
eHBhbnNpb24uYmVoYXZpb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaAppbmRleCA0YjZjZWJmMjEyNzU4
ZDE5ZTdkNDY3ZTYyNzMyZmE2OWIxMjE5YjA3Li44ZTRkOTU2MGExMTY3ZDE3MGQ2ODdkNzVjMDEx
NWQxOWJiYmFhNWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKQEAgLTQ4LDE0ICs0OCwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIGJvb2wgbGluZUlzQ29uc3RyYWluZWRCeUZsb2F0IHsgZmFsc2UgfTsK
ICAgICB9OwogCi0gICAgZW51bSBjbGFzcyBJbnRyaW5zaWNTaXppbmcgeyBObywgWWVzIH07Ci0g
ICAgTGluZUJ1aWxkZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBPcHRpb25hbDxU
ZXh0QWxpZ25Nb2RlPiwgSW50cmluc2ljU2l6aW5nKTsKKyAgICBMaW5lQnVpbGRlcihjb25zdCBJ
bmxpbmVGb3JtYXR0aW5nQ29udGV4dCYpOwogICAgIH5MaW5lQnVpbGRlcigpOwogCiAgICAgdm9p
ZCBpbml0aWFsaXplKGNvbnN0IENvbnN0cmFpbnRzJik7Ci0KLSAgICBlbnVtIGNsYXNzIElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCB7IE5vLCBZZXMgfTsKLSAgICB2b2lkIGNsb3NlKElzTGFz
dExpbmVXaXRoSW5saW5lQ29udGVudCk7CisgICAgdm9pZCBjbG9zZSgpOwogCiAgICAgdm9pZCBh
cHBlbmQoY29uc3QgSW5saW5lSXRlbSYsIElubGluZUxheW91dFVuaXQgbG9naWNhbFdpZHRoKTsK
ICAgICB2b2lkIGFwcGVuZFBhcnRpYWxUcmFpbGluZ1RleHRJdGVtKGNvbnN0IElubGluZVRleHRJ
dGVtJiwgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGgsIGJvb2wgbmVlZHNIeXBlbik7CkBA
IC02OCw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzVHJhaWxpbmdSdW5GdWxseVRyaW1t
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJpbW1hYmxlVHJhaWxpbmdDb250ZW50LmlzVHJhaWxp
bmdSdW5GdWxseVRyaW1tYWJsZSgpOyB9CiAKICAgICBjb25zdCBMaW5lQm94JiBsaW5lQm94KCkg
Y29uc3QgeyByZXR1cm4gbV9saW5lQm94OyB9CisgICAgTGluZUJveCYgbGluZUJveCgpIHsgcmV0
dXJuIG1fbGluZUJveDsgfQogICAgIHZvaWQgbW92ZUxvZ2ljYWxMZWZ0KElubGluZUxheW91dFVu
aXQpOwogICAgIHZvaWQgbW92ZUxvZ2ljYWxSaWdodChJbmxpbmVMYXlvdXRVbml0KTsKICAgICB2
b2lkIHNldEhhc0ludHJ1c2l2ZUZsb2F0KCkgeyBtX2hhc0ludHJ1c2l2ZUZsb2F0ID0gdHJ1ZTsg
fQpAQCAtMTQ0LDYgKzE0Miw3IEBAIHB1YmxpYzoKICAgICB9OwogICAgIHVzaW5nIFJ1bkxpc3Qg
PSBWZWN0b3I8UnVuLCAxMD47CiAgICAgY29uc3QgUnVuTGlzdCYgcnVucygpIGNvbnN0IHsgcmV0
dXJuIG1fcnVuczsgfQorICAgIFJ1bkxpc3QmIHJ1bnMoKSB7IHJldHVybiBtX3J1bnM7IH0KIAog
ICAgIHN0YXRpYyBBc2NlbnRBbmREZXNjZW50IGhhbGZMZWFkaW5nTWV0cmljcyhjb25zdCBGb250
TWV0cmljcyYsIElubGluZUxheW91dFVuaXQgbGluZUxvZ2ljYWxIZWlnaHQpOwogCkBAIC0xOTgs
OCArMTk3LDYgQEAgcHJpdmF0ZToKICAgICBSdW5MaXN0IG1fcnVuczsKICAgICBUcmltbWFibGVU
cmFpbGluZ0NvbnRlbnQgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQ7CiAgICAgSW5saW5lTGF5
b3V0VW5pdCBtX2xpbmVMb2dpY2FsV2lkdGggeyAwIH07Ci0gICAgT3B0aW9uYWw8VGV4dEFsaWdu
TW9kZT4gbV9ob3Jpem9udGFsQWxpZ25tZW50OwotICAgIGJvb2wgbV9pc0ludHJpbnNpY1Npemlu
ZyB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hhc0ludHJ1c2l2ZUZsb2F0IHsgZmFsc2UgfTsKICAg
ICBMaW5lQm94IG1fbGluZUJveDsKICAgICBPcHRpb25hbDxib29sPiBtX2xpbmVJc1Zpc3VhbGx5
RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0NvbnRlbnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5j
cHAKaW5kZXggNThkZTYxM2EwZjM4MzI3OWY5MWI3ZjQzYWE5ODBjYzljMzg3ZDA5Yy4uODAyYmVk
ZDhkNzMxNzUyNTgzM2E0NzQwOGRmMTBkNTQxNzhiMjk5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0
LmNwcApAQCAtMzMyLDIyICszMzIsNyBAQCBMaW5lTGF5b3V0Q29udGV4dDo6TGluZUNvbnRlbnQg
TGluZUxheW91dENvbnRleHQ6OmNsb3NlKExpbmVCdWlsZGVyJiBsaW5lLCBjb25zdAogICAgIGF1
dG8gdHJhaWxpbmdJbmxpbmVJdGVtSW5kZXggPSBsYXlvdXRSYW5nZS5zdGFydCArIG51bWJlck9m
Q29tbWl0dGVkSXRlbXMgLSAxOwogICAgIGF1dG8gbGluZVJhbmdlID0gSW5saW5lSXRlbVJhbmdl
IHsgbGF5b3V0UmFuZ2Uuc3RhcnQsIHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ICsgMSB9OwogICAg
IEFTU0VSVChsaW5lUmFuZ2UuZW5kIDw9IGxheW91dFJhbmdlLmVuZCk7Ci0KLSAgICBhdXRvIGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9IFsmXSB7Ci0gICAgICAgIGlmIChsaW5lUmFuZ2Uu
ZW5kID09IGxheW91dFJhbmdlLmVuZCkKLSAgICAgICAgICAgIHJldHVybiBMaW5lQnVpbGRlcjo6
SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXM7Ci0gICAgICAgIGlmIChwYXJ0aWFsQ29u
dGVudCkKLSAgICAgICAgICAgIHJldHVybiBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50OjpObzsKLSAgICAgICAgLy8gT21pdCBmbG9hdHMgdG8gc2VlIGlmIHRoaXMgaXMg
dGhlIGxhc3QgbGluZSB3aXRoIGlubGluZSBjb250ZW50LgotICAgICAgICBmb3IgKGF1dG8gaSA9
IGxheW91dFJhbmdlLmVuZDsgaS0tOykgewotICAgICAgICAgICAgaWYgKCFtX2lubGluZUl0ZW1z
W2ldLmlzRmxvYXQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gaSA9PSB0cmFpbGluZ0lubGlu
ZUl0ZW1JbmRleCA/IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Olll
cyA6IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgICAg
ICB9Ci0gICAgICAgIC8vIFRoZXJlIGhhcyB0byBiZSBhdCBsZWFzdCBvbmUgbm9uLWZsb2F0IGl0
ZW0uCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gTGluZUJ1
aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudDo6Tm87Ci0gICAgfSgpOwotICAgIGxp
bmUuY2xvc2UoaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICBsaW5lLmNsb3NlKCk7
CiAgICAgLy8gQWRqdXN0IGh5cGhlbmF0ZWQgbGluZSBjb3VudC4KICAgICBtX3N1Y2Nlc3NpdmVI
eXBoZW5hdGVkTGluZUNvdW50ID0gcGFydGlhbENvbnRlbnQgJiYgcGFydGlhbENvbnRlbnQtPnRy
YWlsaW5nQ29udGVudEhhc0h5cGhlbiA/IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQg
KyAxIDogMDsKICAgICByZXR1cm4gTGluZUNvbnRlbnQgeyBwYXJ0aWFsQ29udGVudCwgbGluZVJh
bmdlLCBXVEZNb3ZlKG1fZmxvYXRzKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgKaW5kZXggMzRiOGZj
YjlkYzRhZjU3Y2YyODZkYmFlNmMwOThlMjZjY2MzOGMwMi4uMmQyZmU1ZDIzNDA2YTgzM2M4MjU3
ZDk4NTJhMmM4M2Y1MjJlZmE2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCkBAIC01MSw3ICs1MSw3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIHVuc2lnbmVkIG92ZXJmbG93Q29udGVudExlbmd0aCB7
IDAgfTsKICAgICAgICAgfTsKICAgICAgICAgT3B0aW9uYWw8UGFydGlhbENvbnRlbnQ+IHBhcnRp
YWxDb250ZW50OwotICAgICAgICBJbmxpbmVJdGVtUmFuZ2UgaW5saW5lSXRlbXM7CisgICAgICAg
IElubGluZUl0ZW1SYW5nZSBpbmxpbmVJdGVtUmFuZ2U7CiAgICAgICAgIHN0cnVjdCBGbG9hdCB7
CiAgICAgICAgICAgICBib29sIGlzSW50cnVzaXZlIHsgdHJ1ZSB9OwogICAgICAgICAgICAgY29u
c3QgSW5saW5lSXRlbSogaXRlbSB7IG51bGxwdHIgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>407369</attachid>
            <date>2020-08-26 19:26:24 -0700</date>
            <delta_ts>2020-08-26 21:36:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215016-20200826192623.patch</filename>
            <type>text/plain</type>
            <size>49865</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY2MjE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDFhYzc3OTc0NWQ0YTE4
Y2Y2MzFhNTYzYmYyNDU2YWIwZDliNDk5Yi4uOTczMDk1OTQxYjY2N2RhODYxNDM3MTMxN2Q2MjQ5
ZTI4NTUyYWI2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDIwLTA4LTI2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBMaW5lQnVp
bGRlciBzaG91bGQgbm90IGFsaWduIHRoZSBydW5zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwMTYKKworICAgICAgICBSZXZpZXdlZCBieSBBbnR0
aSBLb2l2aXN0by4KKworICAgICAgICBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciBtb3Zpbmcg
YWxpZ25tZW50IGxvZ2ljIG92ZXIgdG8gdGhlIExpbmVCb3guCisgICAgICAgIExpbmVCdWlsZGVy
IGlzIHJlc3BvbnNpYmxlIGZvciBhZGRpbmcgY29udGVudCB0byB0aGUgbGluZSwgYnV0IHRoZSBm
aW5hbCBhbGlnbm1lbnQgd2lsbCBiZSBkb25lIGJ5IHRoZSBMaW5lQm94LgorICAgICAgICBUaGlz
IHdvcmtzIHdlbGwgd2l0aCBwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24sIHdoZXJlIHdlIHVz
ZSB0aGUgTGluZUJ1aWxkZXIgdG8gY29tcHV0ZSBsaW5lIHdpZHRoIGJ1dCB3ZQorICAgICAgICBk
b24ndCByZWFsbHkgbmVlZCB0byBjb25zdHJ1Y3QgYSBMaW5lQm94IChhbmQgbm8gYWxpZ25tZW50
IGlzIG5lZWRlZCkuCisKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdD
b250ZW50Ojp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdD
b250ZW50Ojppc0NvbmRpdGlvbmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SGFuZ2luZ0NvbnRlbnQ6OnNldElzQ29uZGl0aW9uYWwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpIYW5naW5nQ29udGVudDo6ZXhwYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SGFuZ2luZ0NvbnRlbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNv
bnRlbnRBbGlnbmVyOjpmb3JtYXR0aW5nQ29udGV4dCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6bGF5b3V0U3RhdGUgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OkxpbmVDb250ZW50QWxpZ25l
cik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6YWxpZ25I
b3Jpem9udGFsbHkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWdu
ZXI6OmFsaWduVmVydGljYWxseSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250
ZW50QWxpZ25lcjo6anVzdGlmeVJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5l
Q29udGVudEFsaWduZXI6OmFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhhbmdpbmdDb250ZW50
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjpy
dW5Db250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQ6OmxpbmVMYXlvdXQpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0
cmFpbnQgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6Okxp
bmVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OmNsb3Nl
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJlbW92ZVRyYWlsaW5n
VHJpbW1hYmxlQ29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVy
Ojppc1Zpc3VhbGx5Tm9uRW1wdHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpI
YW5naW5nQ29udGVudDo6d2lkdGggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpIYW5naW5nQ29udGVudDo6aXNDb25kaXRpb25hbCBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkhhbmdpbmdDb250ZW50OjpzZXRJc0NvbmRpdGlvbmFs
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SGFuZ2luZ0NvbnRlbnQ6OmV4
cGFuZCk6IERlbGV0ZWQuCisgICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpIYW5naW5nQ29udGVudDo6cmVzZXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OmZvcm1hdHRpbmdDb250ZXh0IGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjps
YXlvdXRTdGF0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6Okxp
bmVDb250ZW50QWxpZ25lcjo6TGluZUNvbnRlbnRBbGlnbmVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVyOjphbGlnbkhvcml6b250YWxseSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6
YWxpZ25WZXJ0aWNhbGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGlu
ZUNvbnRlbnRBbGlnbmVyOjpqdXN0aWZ5UnVucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVDb250ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUNvbnRlbnRBbGlnbmVy
Ojpjb2xsZWN0SGFuZ2luZ0NvbnRlbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpMaW5lQ29udGVudEFsaWduZXI6OnJ1bkNvbnRlbnRIZWlnaHQgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWls
ZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCdWlsZGVyOjpsaW5lQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJ1aWxkZXI6OnJ1bnMpOgorICAgICAgICAq
IGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZUxheW91dENvbnRleHQ6OmNsb3NlKToKKyAgICAgICAgKiBs
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oOgorCiAyMDIwLTA4LTI2
ICBLYXRlIENoZW5leSAgPGthdGhlcmluZV9jaGVuZXlAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
c291cmNlIExvYWQgU3RhdGlzdGljcyBkYXRhIHN1bW1hcnkgZG9lcyBub3QgcmVwb3J0IGRhdGEg
d2hpY2ggaXMgaGVsZCB1cCBpbiB0aGUgd2ViIGNvbnRlbnQgcHJvY2Vzcy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBjZDhmYTFiMjBjODQwN2Q4NTI4NGM5NTljZDQ3
NmFkODIxOWQzNTdlLi4wMzZlYzU2NTI1ZjQ1ZGQyODA2ODkwZTMxOTJiNzViNDk2ZTZkODcwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVG
b3JtYXR0aW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC03Niw2ICs3NiwzMzMgQEAg
c3RhdGljIGlubGluZSBjb25zdCBCb3gqIG5leHRJbmxpbmVMZXZlbEJveFRvTGF5b3V0KGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBjb25zdAogICAgIHJldHVybiBudWxscHRyOwogfQogCitzdHJ1Y3Qg
SGFuZ2luZ0NvbnRlbnQgeworcHVibGljOgorICAgIHZvaWQgcmVzZXQoKTsKKworICAgIElubGlu
ZUxheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgYm9vbCBp
c0NvbmRpdGlvbmFsKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbmRpdGlvbmFsOyB9CisKKyAgICB2
b2lkIHNldElzQ29uZGl0aW9uYWwoKSB7IG1faXNDb25kaXRpb25hbCA9IHRydWU7IH0KKyAgICB2
b2lkIGV4cGFuZChJbmxpbmVMYXlvdXRVbml0IHdpZHRoKSB7IG1fd2lkdGggKz0gd2lkdGg7IH0K
KworcHJpdmF0ZToKKyAgICBib29sIG1faXNDb25kaXRpb25hbCB7IGZhbHNlIH07CisgICAgSW5s
aW5lTGF5b3V0VW5pdCBtX3dpZHRoIHsgMCB9OworfTsKKwordm9pZCBIYW5naW5nQ29udGVudDo6
cmVzZXQoKQoreworICAgIG1faXNDb25kaXRpb25hbCA9IGZhbHNlOworICAgIG1fd2lkdGggPSAg
MDsKK30KKworY2xhc3MgTGluZUNvbnRlbnRBbGlnbmVyIHsKK3B1YmxpYzoKKyAgICBMaW5lQ29u
dGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmLCBMaW5lQm94JiwgTGlu
ZUJ1aWxkZXI6OlJ1bkxpc3QmLCBJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKKwor
ICAgIGVudW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IHsgTm8sIFllcyB9Owor
ICAgIHZvaWQgYWxpZ25Ib3Jpem9udGFsbHkoVGV4dEFsaWduTW9kZSwgSXNMYXN0TGluZVdpdGhJ
bmxpbmVDb250ZW50KTsKKyAgICB2b2lkIGFsaWduVmVydGljYWxseSgpOworICAgIHZvaWQgYWRq
dXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBqdXN0aWZ5
UnVucyhJbmxpbmVMYXlvdXRVbml0IGF2YWlsYWJsZVdpZHRoKTsKKyAgICBIYW5naW5nQ29udGVu
dCBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KSBjb25z
dDsKKyAgICBJbmxpbmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxk
ZXI6OlJ1biYpIGNvbnN0OworCisgICAgY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGZv
cm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDsgfQorICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1h
dHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQorCisgICAgY29uc3QgSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7CisgICAgTGluZUJveCYgbV9s
aW5lQm94OworICAgIExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7CisgICAgSW5saW5lTGF5
b3V0VW5pdCBtX2F2YWlsYWJsZVdpZHRoOworfTsKKworTGluZUNvbnRlbnRBbGlnbmVyOjpMaW5l
Q29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIGlubGluZUZvcm1h
dHRpbmdDb250ZXh0LCBMaW5lQm94JiBsaW5lQm94LCBMaW5lQnVpbGRlcjo6UnVuTGlzdCYgcnVu
cywgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKKyAgICA6IG1faW5saW5lRm9ybWF0
dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCisgICAgLCBtX2xpbmVCb3gobGlu
ZUJveCkKKyAgICAsIG1fcnVucyhydW5zKQorICAgICwgbV9hdmFpbGFibGVXaWR0aChhdmFpbGFi
bGVXaWR0aCkKK3sKK30KKwordm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFsaWduSG9yaXpvbnRh
bGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgSXNMYXN0TGluZVdpdGhJbmxp
bmVDb250ZW50IGlzTGFzdExpbmUpCit7CisgICAgYXV0byBoYW5naW5nQ29udGVudCA9IGNvbGxl
Y3RIYW5naW5nQ29udGVudChpc0xhc3RMaW5lKTsKKyAgICBhdXRvIGF2YWlsYWJsZVdpZHRoID0g
bV9hdmFpbGFibGVXaWR0aCArIGhhbmdpbmdDb250ZW50LndpZHRoKCk7CisgICAgaWYgKG1fcnVu
cy5pc0VtcHR5KCkgfHwgYXZhaWxhYmxlV2lkdGggPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKGhvcml6b250YWxBbGlnbm1lbnQgPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSkgewor
ICAgICAgICBqdXN0aWZ5UnVucyhhdmFpbGFibGVXaWR0aCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBhdXRvIGFkanVzdG1lbnRGb3JBbGlnbm1lbnQgPSBbJl0gKGF1dG8gYXZhaWxh
YmxlV2lkdGgpIC0+IE9wdGlvbmFsPElubGluZUxheW91dFVuaXQ+IHsKKyAgICAgICAgc3dpdGNo
IChob3Jpem9udGFsQWxpZ25tZW50KSB7CisgICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVm
dDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRMZWZ0OgorICAgICAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OlN0YXJ0OgorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAg
Y2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpX
ZWJLaXRSaWdodDoKKyAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpFbmQ6CisgICAgICAgICAg
ICByZXR1cm4gc3RkOjptYXg8SW5saW5lTGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGgsIDApOwor
ICAgICAgICBjYXNlIFRleHRBbGlnbk1vZGU6OkNlbnRlcjoKKyAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpXZWJLaXRDZW50ZXI6CisgICAgICAgICAgICByZXR1cm4gc3RkOjptYXg8SW5saW5l
TGF5b3V0VW5pdD4oYXZhaWxhYmxlV2lkdGggLyAyLCAwKTsKKyAgICAgICAgY2FzZSBUZXh0QWxp
Z25Nb2RlOjpKdXN0aWZ5OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9OworCisgICAgYXV0byBhZGp1c3RtZW50ID0gYWRq
dXN0bWVudEZvckFsaWdubWVudChhdmFpbGFibGVXaWR0aCk7CisgICAgaWYgKCFhZGp1c3RtZW50
KQorICAgICAgICByZXR1cm47CisgICAgLy8gSG9yaXpvbnRhbCBhbGlnbm1lbnQgbWVhbnMgdGhh
dCB3ZSBub3Qgb25seSBhZGp1c3QgdGhlIHJ1bnMgYnV0IGFsc28gbWFrZSBzdXJlCisgICAgLy8g
dGhhdCB0aGUgbGluZSBib3ggaXMgYWxpZ25lZCBhcyB3ZWxsCisgICAgLy8gZS5nLiA8ZGl2IHN0
eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IHdpZHRoOiAxMDBweDsiPmNlbnRlcmVkIHRleHQ8L2Rp
dj4gOiB0aGUgbGluZSBib3ggd2lsbCBhbHNvIGJlIGNlbnRlcmVkCisgICAgLy8gYXMgb3Bwb3Nl
ZCB0byBzdGFydCBhdCAwcHggYWxsIHRoZSB3YXkgdG8gW2NlbnRlcmVkIHRleHRdIHJ1bidzIHJp
Z2h0IGVkZ2UuCisgICAgbV9saW5lQm94Lm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOwor
ICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKQorICAgICAgICBydW4ubW92ZUhvcml6b250YWxs
eSgqYWRqdXN0bWVudCk7Cit9CisKK3ZvaWQgTGluZUNvbnRlbnRBbGlnbmVyOjphbGlnblZlcnRp
Y2FsbHkoKQoreworICAgIGF1dG8gc2Nyb2xsYWJsZU92ZXJmbG93UmVjdCA9IG1fbGluZUJveC5s
b2dpY2FsUmVjdCgpOworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgIGF1
dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBhdXRvJiBsYXlv
dXRCb3ggPSBydW4ubGF5b3V0Qm94KCk7CisgICAgICAgIGF1dG8gdmVydGljYWxBbGlnbiA9IGxh
eW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKKyAgICAgICAgYXV0byBhc2NlbnQgPSBs
YXlvdXRCb3guc3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpOworCisgICAgICAgIHN3aXRj
aCAodmVydGljYWxBbGlnbikgeworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5l
OgorICAgICAgICAgICAgaWYgKHJ1bi5pc0xpbmVCcmVhaygpIHx8IHJ1bi5pc1RleHQoKSkKKyAg
ICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkg
LSBhc2NlbnQ7CisgICAgICAgICAgICBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7
CisgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgp
Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9
IG1fbGluZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50IC0gYm94R2VvbWV0cnkuYm9y
ZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKKyAgICAgICAg
ICAgIH0gZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSAmJiBsYXlvdXRCb3gu
ZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCgpKSB7CisgICAgICAgICAgICAgICAg
YXV0byYgZm9ybWF0dGluZ1N0YXRlID0gbGF5b3V0U3RhdGUoKS5lc3RhYmxpc2hlZElubGluZUZv
cm1hdHRpbmdTdGF0ZShkb3duY2FzdDxDb250YWluZXJCb3g+KGxheW91dEJveCkpOworICAgICAg
ICAgICAgICAgIC8vIFNwZWMgbWFrZXMgdXMgZ2VuZXJhdGUgYXQgbGVhc3Qgb25lIGxpbmUgLWV2
ZW4gaWYgaXQgaXMgZW1wdHkuCisgICAgICAgICAgICAgICAgYXV0byBpbmxpbmVCbG9ja0Jhc2Vs
aW5lID0gZm9ybWF0dGluZ1N0YXRlLmRpc3BsYXlJbmxpbmVDb250ZW50KCktPmxpbmVCb3hlcy5s
YXN0KCkuYmFzZWxpbmUoKTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgaW5saW5lLWJsb2NrJ3Mg
YmFzZWxpbmUgb2Zmc2V0IGlzIHJlbGF0aXZlIHRvIGl0cyBjb250ZW50IGJveC4gTGV0J3MgY29u
dmVydCBpdCByZWxhdGl2ZSB0byB0aGUgbWFyZ2luIGJveC4KKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICAgX19fX19fX19fX19fX19fIDwtIG1hcmdpbiBib3gKKyAgICAgICAgICAgICAgICAv
LyAgICAgICAgICB8CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCAgX19fX19fX19fX19f
ICA8LSBib3JkZXIgYm94CisgICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8CisgICAgICAg
ICAgICAgICAgLy8gICAgICAgICAgfCB8ICBfX19fX19fX18gIDwtIGNvbnRlbnQgYm94CisgICAg
ICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICBeCisgICAgICAgICAgICAgICAgLy8gICAg
ICAgICAgfCB8IHwgICB8ICA8LSBiYXNlbGluZSBvZmZzZXQKKyAgICAgICAgICAgICAgICAvLyAg
ICAgICAgICB8IHwgfCAgIHwKKyAgICAgICAgICAgICAgICAvLyAgICAgdGV4dCB8IHwgfCAgIHYg
dGV4dAorICAgICAgICAgICAgICAgIC8vICAgICAtLS0tLXwtfC18LS0tLS0tLS0tLSA8LSBiYXNl
bGluZQorICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0
cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAg
ICAgICAgICAgICAgYXV0byBiYXNlbGluZUZyb21NYXJnaW5Cb3ggPSBib3hHZW9tZXRyeS5tYXJn
aW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGlu
Z1RvcCgpLnZhbHVlT3IoMCkgKyBpbmxpbmVCbG9ja0Jhc2VsaW5lOworICAgICAgICAgICAgICAg
IGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIGJhc2VsaW5lRnJv
bU1hcmdpbkJveDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxheW91dEJv
eCk7CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5hbGlnbm1lbnRCYXNl
bGluZSgpIC0gKGJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib3hHZW9tZXRyeS52ZXJ0
aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDBfbHUpICsgcnVuLmxvZ2ljYWxSZWN0KCkuaGVpZ2h0KCkg
KyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSAwX2x1OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmVydGlj
YWxBbGlnbjo6Qm90dG9tOgorICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGluZUJveC5sb2dp
Y2FsQm90dG9tKCkgLSBydW4ubG9naWNhbFJlY3QoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRF
RF9ZRVQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJ1bi5hZGp1
c3RMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOworICAgICAgICAvLyBBZGp1c3Qgc2Nyb2xsYWJsZSBv
dmVyZmxvdyBpZiB0aGUgcnVuIG92ZXJmbG93cyB0aGUgbGluZS4KKyAgICAgICAgc2Nyb2xsYWJs
ZU92ZXJmbG93UmVjdC5leHBhbmRWZXJ0aWNhbGx5VG9Db250YWluKHJ1bi5sb2dpY2FsUmVjdCgp
KTsKKyAgICAgICAgLy8gQ29udmVydCBydW5zIGZyb20gcmVsYXRpdmUgdG8gdGhlIGxpbmUgdG9w
L2xlZnQgdG8gdGhlIGZvcm1hdHRpbmcgcm9vdCdzIGJvcmRlciBib3ggdG9wL2xlZnQuCisgICAg
ICAgIHJ1bi5tb3ZlVmVydGljYWxseShtX2xpbmVCb3gubG9naWNhbFRvcCgpKTsKKyAgICAgICAg
cnVuLm1vdmVIb3Jpem9udGFsbHkobV9saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOworICAgIH0KKyAg
ICBtX2xpbmVCb3guc2V0U2Nyb2xsYWJsZU92ZXJmbG93KHNjcm9sbGFibGVPdmVyZmxvd1JlY3Qp
OworfQorCit2b2lkIExpbmVDb250ZW50QWxpZ25lcjo6anVzdGlmeVJ1bnMoSW5saW5lTGF5b3V0
VW5pdCBhdmFpbGFibGVXaWR0aCkKK3sKKyAgICBBU1NFUlQoYXZhaWxhYmxlV2lkdGggPiAwKTsK
KyAgICAvLyBDb2xsZWN0IHRoZSBleHBhbnNpb24gb3Bwb3J0dW5pdHkgbnVtYmVycyBhbmQgZmlu
ZCB0aGUgbGFzdCBydW4gd2l0aCBjb250ZW50LgorICAgIGF1dG8gZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudCA9IDA7CisgICAgTGluZUJ1aWxkZXI6OlJ1biogbGFzdFJ1bldpdGhDb250ZW50ID0g
bnVsbHB0cjsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykgeworICAgICAgICBleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50ICs9IHJ1bi5leHBhbnNpb25PcHBvcnR1bml0eUNvdW50KCk7Cisg
ICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzQm94KCkpCisgICAgICAgICAgICBsYXN0
UnVuV2l0aENvbnRlbnQgPSAmcnVuOworICAgIH0KKyAgICAvLyBOZWVkIHRvIGZpeCB1cCB0aGUg
bGFzdCBydW4ncyB0cmFpbGluZyBleHBhbnNpb24uCisgICAgaWYgKGxhc3RSdW5XaXRoQ29udGVu
dCAmJiBsYXN0UnVuV2l0aENvbnRlbnQtPmhhc0V4cGFuc2lvbk9wcG9ydHVuaXR5KCkpIHsKKyAg
ICAgICAgLy8gVHVybiBvZmYgdGhlIHRyYWlsaW5nIGJpdHMgZmlyc3QgYW5kIGFkZCB0aGUgZm9y
YmlkIHRyYWlsaW5nIGV4cGFuc2lvbi4KKyAgICAgICAgYXV0byBsZWZ0RXhwYW5zaW9uID0gbGFz
dFJ1bldpdGhDb250ZW50LT5leHBhbnNpb25CZWhhdmlvcigpICYgTGVmdEV4cGFuc2lvbk1hc2s7
CisgICAgICAgIGxhc3RSdW5XaXRoQ29udGVudC0+c2V0RXhwYW5zaW9uQmVoYXZpb3IobGVmdEV4
cGFuc2lvbiB8IEZvcmJpZFJpZ2h0RXhwYW5zaW9uKTsKKyAgICB9CisgICAgLy8gTm90aGluZyB0
byBkaXN0cmlidXRlPworICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCkKKyAgICAg
ICAgcmV0dXJuOworICAgIC8vIERpc3RyaWJ1dGUgdGhlIGV4dHJhIHNwYWNlLgorICAgIGF1dG8g
ZXhwYW5zaW9uVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlV2lkdGggLyBleHBhbnNpb25PcHBvcnR1
bml0eUNvdW50OworICAgIElubGluZUxheW91dFVuaXQgYWNjdW11bGF0ZWRFeHBhbnNpb24gPSAw
OworICAgIGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7CisgICAgICAgIC8vIEV4cGFuZCBhbmQg
bW92ZXMgcnVucyBieSB0aGUgYWNjdW11bGF0ZWQgZXhwYW5zaW9uLgorICAgICAgICBpZiAoIXJ1
bi5oYXNFeHBhbnNpb25PcHBvcnR1bml0eSgpKSB7CisgICAgICAgICAgICBydW4ubW92ZUhvcml6
b250YWxseShhY2N1bXVsYXRlZEV4cGFuc2lvbik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICBBU1NFUlQocnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoKSk7
CisgICAgICAgIGF1dG8gY29tcHV0ZWRFeHBhbnNpb24gPSBleHBhbnNpb25Ub0Rpc3RyaWJ1dGUg
KiBydW4uZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCgpOworICAgICAgICBydW4uc2V0Q29tcHV0
ZWRIb3Jpem9udGFsRXhwYW5zaW9uKGNvbXB1dGVkRXhwYW5zaW9uKTsKKyAgICAgICAgcnVuLm1v
dmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOworICAgICAgICBhY2N1bXVsYXRl
ZEV4cGFuc2lvbiArPSBjb21wdXRlZEV4cGFuc2lvbjsKKyAgICB9Cit9CisKK3ZvaWQgTGluZUNv
bnRlbnRBbGlnbmVyOjphZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKQoreworICAgIHVuc2ln
bmVkIGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCA9IDA7CisgICAgYXV0byBoYXNTZWVuRGly
ZWN0VGV4dE9yTGluZUJyZWFrID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBydW4gOiBtX3J1bnMp
IHsKKyAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOworICAgICAgICBh
dXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOworCisgICAgICAgIHJ1bi5zZXRMb2dpY2Fs
SGVpZ2h0KHJ1bkNvbnRlbnRIZWlnaHQocnVuKSk7CisKKyAgICAgICAgaWYgKHJ1bi5pc1RleHQo
KSB8fCBydW4uaXNMaW5lQnJlYWsoKSkgeworICAgICAgICAgICAgaWYgKGlubGluZUNvbnRhaW5l
ck5lc3RpbmdMZXZlbCkgeworICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgYWRqdXN0
ZWQgdGhlIGxpbmUgaGVpZ2h0L2Jhc2VsaW5lIHRocm91Z2ggdGhlIHBhcmVudCBpbmxpbmUgY29u
dGFpbmVyLiAKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrKSB7CisgICAgICAgICAgICAg
ICAgLy8gZS5nIGRpdj5maXJzdCB0ZXh0PC9kaXY+IG9yIDxkaXY+PHNwYW4+bmVzdGVkPHNwYW4+
Zmlyc3QgZGlyZWN0IHRleHQ8L2Rpdj4uCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBoYXNTZWVuRGlyZWN0VGV4dE9yTGluZUJyZWFrID0gdHJ1
ZTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHJ1bi5p
c0NvbnRhaW5lclN0YXJ0KCkpIHsKKyAgICAgICAgICAgICsraW5saW5lQ29udGFpbmVyTmVzdGlu
Z0xldmVsOworICAgICAgICAgICAgLy8gSW5saW5lIGNvbnRhaW5lcnMgc3RyZXRjaCB0aGUgbGlu
ZSBieSB0aGVpciBmb250IHNpemUuCisgICAgICAgICAgICAvLyBWZXJ0aWNhbCBtYXJnaW5zLCBw
YWRkaW5ncyBhbmQgYm9yZGVycyBkb24ndCBjb250cmlidXRlIHRvIHRoZSBsaW5lIGhlaWdodC4K
KyAgICAgICAgICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gc3R5bGUuZm9udE1ldHJpY3MoKTsKKyAg
ICAgICAgICAgIGlmIChzdHlsZS52ZXJ0aWNhbEFsaWduKCkgPT0gVmVydGljYWxBbGlnbjo6QmFz
ZWxpbmUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGhhbGZMZWFkaW5nID0gTGluZUJ1aWxkZXI6
OmhhbGZMZWFkaW5nTWV0cmljcyhmb250TWV0cmljcywgc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0
KCkpOworICAgICAgICAgICAgICAgIC8vIEJvdGggaGFsZmxlYWRpbmcgYXNjZW50IGFuZCBkZXNj
ZW50IGNvdWxkIGJlIG5lZ2F0aXZlICh0YWxsIGZvbnQgdnMuIHNtYWxsIGxpbmUtaGVpZ2h0IHZh
bHVlKQorICAgICAgICAgICAgICAgIGlmIChoYWxmTGVhZGluZy5kZXNjZW50ID4gMCkKKyAgICAg
ICAgICAgICAgICAgICAgbV9saW5lQm94LnNldERlc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRpbmcu
ZGVzY2VudCk7CisgICAgICAgICAgICAgICAgaWYgKGhhbGZMZWFkaW5nLmFzY2VudCA+IDApCisg
ICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRBc2NlbnRJZkdyZWF0ZXIoaGFsZkxlYWRp
bmcuYXNjZW50KTsKKyAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElm
R3JlYXRlcihtX2xpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmhlaWdodCgpKTsKKyAgICAgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0SWZH
cmVhdGVyKGZvbnRNZXRyaWNzLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7CisgICAgICAgICAg
ICAvLyBUaGUgbGluZSdzIGJhc2VsaW5lIGFuZCBoZWlnaHQgaGF2ZSBhbHJlYWR5IGJlZW4gYWRq
dXN0ZWQgYXQgQ29udGFpbmVyU3RhcnQuCisgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ29udGFp
bmVyTmVzdGluZ0xldmVsKTsKKyAgICAgICAgICAgIC0taW5saW5lQ29udGFpbmVyTmVzdGluZ0xl
dmVsOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAocnVu
LmlzQm94KCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0Nv
bnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgICAgICAgICAgYXV0byBtYXJn
aW5Cb3hIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKKworICAgICAgICAg
ICAgc3dpdGNoIChzdHlsZS52ZXJ0aWNhbEFsaWduKCkpIHsKKyAgICAgICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6QmFzZWxpbmU6IHsKKyAgICAgICAgICAgICAgICBpZiAobGF5b3V0Qm94Lmlz
SW5saW5lQmxvY2tCb3goKSAmJiBsYXlvdXRCb3guZXN0YWJsaXNoZXNJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIElubGluZS1ibG9ja3Mgd2l0aCBp
bmxpbmUgY29udGVudCBhbHdheXMgaGF2ZSBiYXNlbGluZXMuCisgICAgICAgICAgICAgICAgICAg
IGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVG
b3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVyQm94PihsYXlvdXRCb3gpKTsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVu
IGlmIGl0IGlzIGVtcHR5LgorICAgICAgICAgICAgICAgICAgICBhdXRvJiBsYXN0TGluZUJveCA9
IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5saW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgp
OworICAgICAgICAgICAgICAgICAgICBhdXRvIGJlZm9yZUhlaWdodCA9IGJveEdlb21ldHJ5Lm1h
cmdpbkJlZm9yZSgpICsgYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5wYWRk
aW5nVG9wKCkudmFsdWVPcigwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFs
aWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKGJlZm9yZUhlaWdodCArIGxhc3RMaW5lQm94LmJhc2Vs
aW5lKCkpOworICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElm
R3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE5vbiBpbmxpbmUtYmxvY2sgYm94ZXMgc2l0IG9uIHRoZSBiYXNl
bGluZSAoaW5jbHVkaW5nIHRoZWlyIGJvdHRvbSBtYXJnaW4pLgorICAgICAgICAgICAgICAgICAg
ICBtX2xpbmVCb3guc2V0QXNjZW50SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCk7CisgICAgICAg
ICAgICAgICAgICAgIC8vIElnbm9yZSBuZWdhdGl2ZSBkZXNjZW50ICh5ZXMsIG5lZ2F0aXZlIGRl
c2NlbnQgaXMgYSB0aGluZykuCisgICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0SWZHcmVhdGVyKG1hcmdpbkJveEhlaWdodCArIHN0ZDo6bWF4PElubGluZUxheW91
dFVuaXQ+KDAsIG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAgICAgICAgICAgICAgIC8vIFRvcCBh
bGlnbiBjb250ZW50IG5ldmVyIGNoYW5nZXMgdGhlIGJhc2VsaW5lLCBpdCBvbmx5IHB1c2hlcyB0
aGUgYm90dG9tIG9mIHRoZSBsaW5lIGZ1cnRoZXIgZG93bi4KKyAgICAgICAgICAgICAgICBtX2xp
bmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206
IHsKKyAgICAgICAgICAgICAgICAvLyBCb3R0b20gYWxpZ25lZCwgdGFsbCBjb250ZW50IHB1c2hl
cyB0aGUgYmFzZWxpbmUgZnVydGhlciBkb3duIGZyb20gdGhlIGxpbmUgdG9wLgorICAgICAgICAg
ICAgICAgIGF1dG8gbGluZUxvZ2ljYWxIZWlnaHQgPSBtX2xpbmVCb3gubG9naWNhbEhlaWdodCgp
OworICAgICAgICAgICAgICAgIGlmIChtYXJnaW5Cb3hIZWlnaHQgPiBsaW5lTG9naWNhbEhlaWdo
dCkgeworICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3Jl
YXRlcihtYXJnaW5Cb3hIZWlnaHQpOworICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0
QWxpZ25tZW50QmFzZWxpbmVJZkdyZWF0ZXIobV9saW5lQm94LmFsaWdubWVudEJhc2VsaW5lKCkg
KyAobWFyZ2luQm94SGVpZ2h0IC0gbGluZUxvZ2ljYWxIZWlnaHQpKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgIH0KK30KKworSGFuZ2luZ0NvbnRlbnQgTGluZUNvbnRlbnRBbGln
bmVyOjpjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IGlz
TGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkgY29uc3QKK3sKKyAgICBhdXRvIGhhbmdpbmdDb250
ZW50ID0gSGFuZ2luZ0NvbnRlbnQgeyB9OworICAgIGlmIChpc0xhc3RMaW5lV2l0aElubGluZUNv
bnRlbnQgPT0gSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCisgICAgICAgIGhhbmdp
bmdDb250ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKKyAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6
bWFrZVJldmVyc2VkUmFuZ2UobV9ydW5zKSkgeworICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVy
U3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKKyAgICAgICAgICAgIGhhbmdpbmdDb250
ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisgICAgICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3
aGl0ZXNwYWNlLgorICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRl
U3BhY2U6OlByZVdyYXApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gVGhpcyBpcyBl
aXRoZXIgYSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3Bh
Y2UuCisgICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNl
V2lkdGgoKSk7CisgICAgfQorICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKK30KKworSW5saW5l
TGF5b3V0VW5pdCBMaW5lQ29udGVudEFsaWduZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGlu
ZUJ1aWxkZXI6OlJ1biYgcnVuKSBjb25zdAoreworICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVu
LnN0eWxlKCkuZm9udE1ldHJpY3MoKTsKKyAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xp
bmVCcmVhaygpKQorICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CisKKyAgICBp
ZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOworCisgICAgYXV0byYgbGF5b3V0Qm94ID0g
cnVuLmxheW91dEJveCgpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGlmIChsYXlvdXRCb3guaXNSZXBs
YWNlZEJveCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQorICAgICAgICBy
ZXR1cm4gYm94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOworCisgICAgLy8gTm9uLXJlcGxh
Y2VkIGlubGluZSBib3ggKGUuZy4gaW5saW5lLWJsb2NrKS4gSXQgbG9va3MgYSBiaXQgbWlzbGVh
ZGluZyBidXQgdGhlaXIgbWFyZ2luIGJveCBpcyBjb25zaWRlcmVkIHRoZSBjb250ZW50IGhlaWdo
dCBoZXJlLgorICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKK30KKwog
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0SW5GbG93Q29udGVudChJbnZhbGlk
YXRpb25TdGF0ZSYgaW52YWxpZGF0aW9uU3RhdGUsIGNvbnN0IENvbnN0cmFpbnRzRm9ySW5GbG93
Q29udGVudCYgY29uc3RyYWludHMpCiB7CiAgICAgTE9HX1dJVEhfU1RSRUFNKEZvcm1hdHRpbmdD
b250ZXh0TGF5b3V0LCBzdHJlYW0gPDwgIltTdGFydF0gLT4gaW5saW5lIGZvcm1hdHRpbmcgY29u
dGV4dCAtPiBmb3JtYXR0aW5nIHJvb3QoIiA8PCAmcm9vdCgpIDw8ICIpIik7CkBAIC0xMzksNyAr
NDY2LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6bGluZUxheW91dChJbmxpbmVJ
dGVtcyYgaW5saW5lSXRlbXMsIExpbmVMYXlvdXRDb24KICAgICAgICAgT3B0aW9uYWw8dW5zaWdu
ZWQ+IG92ZXJmbG93Q29udGVudExlbmd0aDsKICAgICB9OwogICAgIE9wdGlvbmFsPFByZXZpb3Vz
TGluZT4gcHJldmlvdXNMaW5lOwotICAgIGF1dG8gbGluZSA9IExpbmVCdWlsZGVyIHsgKnRoaXMs
IHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpLCBMaW5lQnVpbGRlcjo6SW50cmluc2ljU2l6aW5n
OjpObyB9OworICAgIGF1dG8gbGluZSA9IExpbmVCdWlsZGVyIHsgKnRoaXMgfTsKICAgICBhdXRv
IGxpbmVMYXlvdXRDb250ZXh0ID0gTGluZUxheW91dENvbnRleHQgeyAqdGhpcywgcm9vdCgpLCBp
bmxpbmVJdGVtcyB9OwogCiAgICAgd2hpbGUgKCFuZWVkc0xheW91dFJhbmdlLmlzRW1wdHkoKSkg
ewpAQCAtMTQ4LDkgKzQ3NSw1NSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsaW5l
TGF5b3V0KElubGluZUl0ZW1zJiBpbmxpbmVJdGVtcywgTGluZUxheW91dENvbgogICAgICAgICAv
LyAic3BbPC1saW5lIGJyZWFrLT5dbGl0X2NvbnRlbnQiIC0+IG92ZXJmbG93IGxlbmd0aDogMTEg
LT4gbGVhZGluZyBwYXJ0aWFsIGNvbnRlbnQgbGVuZ3RoOiAxMS4KICAgICAgICAgYXV0byBwYXJ0
aWFsTGVhZGluZ0NvbnRlbnRMZW5ndGggPSBwcmV2aW91c0xpbmUgPyBwcmV2aW91c0xpbmUtPm92
ZXJmbG93Q29udGVudExlbmd0aCA6IFdURjo6bnVsbG9wdDsKICAgICAgICAgYXV0byBsaW5lQ29u
dGVudCA9IGxpbmVMYXlvdXRDb250ZXh0LmxheW91dElubGluZUNvbnRlbnQobGluZSwgbmVlZHNM
YXlvdXRSYW5nZSwgcGFydGlhbExlYWRpbmdDb250ZW50TGVuZ3RoKTsKKyAgICAgICAgYXV0byYg
bGluZUJveCA9IGxpbmUubGluZUJveCgpOworICAgICAgICBhdXRvIGxpbmVDb250ZW50UmFuZ2Ug
PSBsaW5lQ29udGVudC5pbmxpbmVJdGVtUmFuZ2U7CisKKyAgICAgICAgLy8gRklYTUU6IFRoaXMg
aXMgdGVtcG9yYXJ5IGFuZCB3aWxsIGV2ZW50dWFsbHkgZ2V0IG1lcmdlZCB0byBMaW5lQm94Lgor
ICAgICAgICBhdXRvIGFsaWduTGluZUNvbnRlbnQgPSBbJl0geworICAgICAgICAgICAgYXV0byBj
b250ZW50QWxpZ25lciA9IExpbmVDb250ZW50QWxpZ25lciB7ICp0aGlzLCBsaW5lQm94LCBsaW5l
LnJ1bnMoKSwgbGluZS5hdmFpbGFibGVXaWR0aCgpIH07CisgICAgICAgICAgICBjb250ZW50QWxp
Z25lci5hZGp1c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKKyAgICAgICAgICAgIGlmIChsaW5l
LmlzVmlzdWFsbHlFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbGluZUJveC5yZXNldEFsaWdu
bWVudEJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0
KHsgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBSZW1vdmUgZGVzY2VudCB3aGVu
IGFsbCBjb250ZW50IGlzIGJhc2VsaW5lIGFsaWduZWQgYnV0IG5vbmUgb2YgdGhlbSBoYXZlIGRl
c2NlbnQuCisgICAgICAgICAgICBpZiAocXVpcmtzKCkubGluZURlc2NlbnROZWVkc0NvbGxhcHNp
bmcobGluZS5ydW5zKCkpKSB7CisgICAgICAgICAgICAgICAgbGluZUJveC5zaHJpbmtWZXJ0aWNh
bGx5KGxpbmVCb3guYXNjZW50QW5kRGVzY2VudCgpLmRlc2NlbnQpOworICAgICAgICAgICAgICAg
IGxpbmVCb3gucmVzZXREZXNjZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250
ZW50QWxpZ25lci5hbGlnblZlcnRpY2FsbHkoKTsKKworICAgICAgICAgICAgYXV0byBpc0xhc3RM
aW5lV2l0aElubGluZUNvbnRlbnQgPSBbJl0geworICAgICAgICAgICAgICAgIGlmIChsaW5lQ29u
dGVudFJhbmdlLmVuZCA9PSBuZWVkc0xheW91dFJhbmdlLmVuZCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIExpbmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
OjpZZXM7CisgICAgICAgICAgICAgICAgaWYgKGxpbmVDb250ZW50LnBhcnRpYWxDb250ZW50KQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAgICAgICAgICAgICAgIC8vIE9taXQgZmxvYXRzIHRv
IHNlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGxpbmUgd2l0aCBpbmxpbmUgY29udGVudC4KKyAgICAg
ICAgICAgICAgICBmb3IgKGF1dG8gaSA9IG5lZWRzTGF5b3V0UmFuZ2UuZW5kOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghaW5saW5lSXRlbXNbaV0uaXNGbG9hdCgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgPT0gbGluZUNvbnRlbnRSYW5nZS5lbmQgLSAxID8g
TGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcyA6IExp
bmVDb250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0
IG9uZSBub24tZmxvYXQgaXRlbS4KKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTGluZUNvbnRlbnRBbGlnbmVyOjpJc0xhc3RMaW5l
V2l0aElubGluZUNvbnRlbnQ6Ok5vOworICAgICAgICAgICAgfSgpOworCisgICAgICAgICAgICBh
dXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVudCA9IFsmXSB7CisgICAgICAgICAgICAgICAg
aWYgKHJvb3QoKS5zdHlsZSgpLnRleHRBbGlnbigpICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByb290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsK
KyAgICAgICAgICAgICAgICAvLyBUZXh0IGlzIGp1c3RpZmllZCBhY2NvcmRpbmcgdG8gdGhlIG1l
dGhvZCBzcGVjaWZpZWQgYnkgdGhlIHRleHQtanVzdGlmeSBwcm9wZXJ0eSwKKyAgICAgICAgICAg
ICAgICAvLyBpbiBvcmRlciB0byBleGFjdGx5IGZpbGwgdGhlIGxpbmUgYm94LiBVbmxlc3Mgb3Ro
ZXJ3aXNlIHNwZWNpZmllZCBieSB0ZXh0LWFsaWduLWxhc3QsCisgICAgICAgICAgICAgICAgLy8g
dGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3IgdGhlIGVuZCBvZiB0aGUgYmxv
Y2sgaXMgc3RhcnQtYWxpZ25lZC4KKyAgICAgICAgICAgICAgICBpZiAobGluZS5ydW5zKCkubGFz
dCgpLmlzTGluZUJyZWFrKCkgfHwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID09IExpbmVD
b250ZW50QWxpZ25lcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBUZXh0QWxpZ25Nb2RlOjpTdGFydDsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKKyAgICAgICAgICAgIH07CisgICAgICAg
ICAgICBjb250ZW50QWxpZ25lci5hbGlnbkhvcml6b250YWxseShjb21wdXRlZEhvcml6b250YWxB
bGlnbm1lbnQoKSwgaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBhbGlnbkxpbmVDb250ZW50KCk7CiAgICAgICAgIHNldERpc3BsYXlCb3hlc0Zvckxp
bmUobGluZSwgbGluZUNvbnRlbnQsIGNvbnN0cmFpbnRzLmhvcml6b250YWwpOwogCi0gICAgICAg
IGF1dG8gbGluZUNvbnRlbnRSYW5nZSA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1zOwogICAgICAg
ICBpZiAoIWxpbmVDb250ZW50UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBBU1NFUlQo
bmVlZHNMYXlvdXRSYW5nZS5zdGFydCA8IGxpbmVDb250ZW50UmFuZ2UuZW5kKTsKICAgICAgICAg
ICAgIGxpbmVMb2dpY2FsVG9wID0gbGluZS5saW5lQm94KCkubG9naWNhbEJvdHRvbSgpOwpAQCAt
MjQ4LDE0ICs2MjEsMTQgQEAgSW5saW5lTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aEZvckNvbnN0cmFpbnQoSW4KIHsKICAgICBhdXRvJiBp
bmxpbmVJdGVtcyA9IGZvcm1hdHRpbmdTdGF0ZSgpLmlubGluZUl0ZW1zKCk7CiAgICAgYXV0byBt
YXhpbXVtTGluZVdpZHRoID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgYXV0byBsaW5lID0g
TGluZUJ1aWxkZXIgeyAqdGhpcywgcm9vdCgpLnN0eWxlKCkudGV4dEFsaWduKCksIExpbmVCdWls
ZGVyOjpJbnRyaW5zaWNTaXppbmc6OlllcyB9OworICAgIGF1dG8gbGluZSA9IExpbmVCdWlsZGVy
IHsgKnRoaXMgfTsKICAgICBhdXRvIGxpbmVMYXlvdXRDb250ZXh0ID0gTGluZUxheW91dENvbnRl
eHQgeyAqdGhpcywgcm9vdCgpLCBpbmxpbmVJdGVtcyB9OwogICAgIGF1dG8gbGF5b3V0UmFuZ2Ug
PSBMaW5lTGF5b3V0Q29udGV4dDo6SW5saW5lSXRlbVJhbmdlIHsgMCAsIGlubGluZUl0ZW1zLnNp
emUoKSB9OwogICAgIHdoaWxlICghbGF5b3V0UmFuZ2UuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8v
IE9ubHkgdGhlIGhvcml6dG9uYWwgYXZhaWxhYmxlIHdpZHRoIGlzIGNvbnN0cmFpbmVkIHdoZW4g
Y29tcHV0aW5nIGludHJpbnNpYyB3aWR0aC4KICAgICAgICAgbGluZS5pbml0aWFsaXplKExpbmVC
dWlsZGVyOjpDb25zdHJhaW50cyB7IHsgfSwgYXZhaWxhYmxlV2lkdGgsIHsgfSwgZmFsc2UgfSk7
CiAgICAgICAgIGF1dG8gbGluZUNvbnRlbnQgPSBsaW5lTGF5b3V0Q29udGV4dC5sYXlvdXRJbmxp
bmVDb250ZW50KGxpbmUsIGxheW91dFJhbmdlLCB7IH0pOwotICAgICAgICBsYXlvdXRSYW5nZS5z
dGFydCA9IGxpbmVDb250ZW50LmlubGluZUl0ZW1zLmVuZDsKKyAgICAgICAgbGF5b3V0UmFuZ2Uu
c3RhcnQgPSBsaW5lQ29udGVudC5pbmxpbmVJdGVtUmFuZ2UuZW5kOwogICAgICAgICAvLyBGSVhN
RTogVXNlIGxpbmUgbG9naWNhbCBsZWZ0IGFuZCByaWdodCB0byB0YWtlIGZsb2F0cyBpbnRvIGFj
Y291bnQuCiAgICAgICAgIG1heGltdW1MaW5lV2lkdGggPSBzdGQ6Om1heChtYXhpbXVtTGluZVdp
ZHRoLCBsaW5lLmxpbmVCb3goKS5sb2dpY2FsV2lkdGgoKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdDb250ZXh0LmgKaW5kZXggMWRiMGZjNGRjZjY0YmE2NGRlNWUzMzE1ZTQzMzdiZWMx
NGY4Y2VkYy4uMzY0NDU0N2IzMGU0ZWQ0MTM4MTNmYWMxZmFhNDJkZjI1MThhZTY2ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC05Myw4ICs5Myw2IEBAIHByaXZhdGU6CiAK
ICAgICBjb25zdCBJbmxpbmVGb3JtYXR0aW5nU3RhdGUmIGZvcm1hdHRpbmdTdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIGRvd25jYXN0PElubGluZUZvcm1hdHRpbmdTdGF0ZT4oRm9ybWF0dGluZ0NvbnRl
eHQ6OmZvcm1hdHRpbmdTdGF0ZSgpKTsgfQogICAgIElubGluZUZvcm1hdHRpbmdTdGF0ZSYgZm9y
bWF0dGluZ1N0YXRlKCkgeyByZXR1cm4gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihG
b3JtYXR0aW5nQ29udGV4dDo6Zm9ybWF0dGluZ1N0YXRlKCkpOyB9Ci0gICAgLy8gRklYTUU6IENv
bWUgdXAgd2l0aCBhIHN0cnVjdHVyZSB0aGF0IHJlcXVpcmVzIG5vIGZyaWVuZGluZy4KLSAgICBm
cmllbmQgY2xhc3MgTGluZUJ1aWxkZXI7CiB9OwogCiBpbmxpbmUgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjpHZW9tZXRyeShjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYg
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5jcHAKaW5kZXggZTVj
Nzk5NmM2MWM1MGNhYzY4MjVkODk4ZGUwMWU5M2FiNDM2ZWFkNS4uNmYzZjRlMmU1YTE3ZThiNWNh
ZTJmNTllYWNiNzkwYTQ5ZjBiMGFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmNwcApAQCAtNDMs
MzM3ICs0Myw5IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlc3BhY2VQcmVzZXJ2ZWQoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIHJldHVybiB3aGl0ZXNwYWNlID09IFdoaXRlU3Bh
Y2U6OlByZSB8fCB3aGl0ZXNwYWNlID09IFdoaXRlU3BhY2U6OlByZVdyYXAgfHwgd2hpdGVzcGFj
ZSA9PSBXaGl0ZVNwYWNlOjpCcmVha1NwYWNlczsKIH0KIAotc3RydWN0IEhhbmdpbmdDb250ZW50
IHsKLXB1YmxpYzoKLSAgICB2b2lkIHJlc2V0KCk7Ci0KLSAgICBJbmxpbmVMYXlvdXRVbml0IHdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aDsgfQotICAgIGJvb2wgaXNDb25kaXRpb25hbCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNDb25kaXRpb25hbDsgfQotCi0gICAgdm9pZCBzZXRJc0NvbmRp
dGlvbmFsKCkgeyBtX2lzQ29uZGl0aW9uYWwgPSB0cnVlOyB9Ci0gICAgdm9pZCBleHBhbmQoSW5s
aW5lTGF5b3V0VW5pdCB3aWR0aCkgeyBtX3dpZHRoICs9IHdpZHRoOyB9Ci0KLXByaXZhdGU6Ci0g
ICAgYm9vbCBtX2lzQ29uZGl0aW9uYWwgeyBmYWxzZSB9OwotICAgIElubGluZUxheW91dFVuaXQg
bV93aWR0aCB7IDAgfTsKLX07Ci0KLXZvaWQgSGFuZ2luZ0NvbnRlbnQ6OnJlc2V0KCkKLXsKLSAg
ICBtX2lzQ29uZGl0aW9uYWwgPSBmYWxzZTsKLSAgICBtX3dpZHRoID0gIDA7Ci19Ci0KLWNsYXNz
IExpbmVDb250ZW50QWxpZ25lciB7Ci1wdWJsaWM6Ci0gICAgTGluZUNvbnRlbnRBbGlnbmVyKGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiwgTGluZUJveCYsIExpbmVCdWlsZGVyOjpSdW5M
aXN0JiwgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCk7Ci0KLSAgICB2b2lkIGFsaWdu
SG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUsIExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElu
bGluZUNvbnRlbnQpOwotICAgIHZvaWQgYWxpZ25WZXJ0aWNhbGx5KCk7Ci0gICAgdm9pZCBhZGp1
c3RCYXNlbGluZUFuZExpbmVIZWlnaHQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lkIGp1c3RpZnlS
dW5zKElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpOwotICAgIEhhbmdpbmdDb250ZW50
IGNvbGxlY3RIYW5naW5nQ29udGVudChMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KSBjb25zdDsKLSAgICBJbmxpbmVMYXlvdXRVbml0IHJ1bkNvbnRlbnRIZWlnaHQoY29u
c3QgTGluZUJ1aWxkZXI6OlJ1biYpIGNvbnN0OwotCi0gICAgY29uc3QgSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDsgfQotICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkubGF5b3V0U3RhdGUoKTsgfQotCi0gICAgY29uc3Qg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQmIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7Ci0gICAg
TGluZUJveCYgbV9saW5lQm94OwotICAgIExpbmVCdWlsZGVyOjpSdW5MaXN0JiBtX3J1bnM7Ci0g
ICAgSW5saW5lTGF5b3V0VW5pdCBtX2F2YWlsYWJsZVdpZHRoOwotfTsKLQotTGluZUNvbnRlbnRB
bGlnbmVyOjpMaW5lQ29udGVudEFsaWduZXIoY29uc3QgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQm
IGlubGluZUZvcm1hdHRpbmdDb250ZXh0LCBMaW5lQm94JiBsaW5lQm94LCBMaW5lQnVpbGRlcjo6
UnVuTGlzdCYgcnVucywgSW5saW5lTGF5b3V0VW5pdCBhdmFpbGFibGVXaWR0aCkKLSAgICA6IG1f
aW5saW5lRm9ybWF0dGluZ0NvbnRleHQoaW5saW5lRm9ybWF0dGluZ0NvbnRleHQpCi0gICAgLCBt
X2xpbmVCb3gobGluZUJveCkKLSAgICAsIG1fcnVucyhydW5zKQotICAgICwgbV9hdmFpbGFibGVX
aWR0aChhdmFpbGFibGVXaWR0aCkKLXsKLX0KLQotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6OmFs
aWduSG9yaXpvbnRhbGx5KFRleHRBbGlnbk1vZGUgaG9yaXpvbnRhbEFsaWdubWVudCwgTGluZUJ1
aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQotewotICAgIGF1
dG8gaGFuZ2luZ0NvbnRlbnQgPSBjb2xsZWN0SGFuZ2luZ0NvbnRlbnQoaXNMYXN0TGluZSk7Ci0g
ICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IG1fYXZhaWxhYmxlV2lkdGggKyBoYW5naW5nQ29udGVu
dC53aWR0aCgpOwotICAgIGlmIChtX3J1bnMuaXNFbXB0eSgpIHx8IGF2YWlsYWJsZVdpZHRoIDw9
IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChob3Jpem9udGFsQWxpZ25tZW50ID09IFRl
eHRBbGlnbk1vZGU6Okp1c3RpZnkpIHsKLSAgICAgICAganVzdGlmeVJ1bnMoYXZhaWxhYmxlV2lk
dGgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgYXV0byBhZGp1c3RtZW50Rm9yQWxp
Z25tZW50ID0gWyZdIChhdXRvIGF2YWlsYWJsZVdpZHRoKSAtPiBPcHRpb25hbDxJbmxpbmVMYXlv
dXRVbml0PiB7Ci0gICAgICAgIHN3aXRjaCAoaG9yaXpvbnRhbEFsaWdubWVudCkgewotICAgICAg
ICBjYXNlIFRleHRBbGlnbk1vZGU6OkxlZnQ6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6
V2ViS2l0TGVmdDoKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAgICAg
ICAgIHJldHVybiB7IH07Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6UmlnaHQ6Ci0gICAg
ICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQ6Ci0gICAgICAgIGNhc2UgVGV4dEFs
aWduTW9kZTo6RW5kOgotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVu
aXQ+KGF2YWlsYWJsZVdpZHRoLCAwKTsKLSAgICAgICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50
ZXI6Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6V2ViS2l0Q2VudGVyOgotICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWF4PElubGluZUxheW91dFVuaXQ+KGF2YWlsYWJsZVdpZHRoIC8gMiwg
MCk7Ci0gICAgICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6SnVzdGlmeToKLSAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfTsKLQot
ICAgIGF1dG8gYWRqdXN0bWVudCA9IGFkanVzdG1lbnRGb3JBbGlnbm1lbnQoYXZhaWxhYmxlV2lk
dGgpOwotICAgIGlmICghYWRqdXN0bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEhvcml6
b250YWwgYWxpZ25tZW50IG1lYW5zIHRoYXQgd2Ugbm90IG9ubHkgYWRqdXN0IHRoZSBydW5zIGJ1
dCBhbHNvIG1ha2Ugc3VyZQotICAgIC8vIHRoYXQgdGhlIGxpbmUgYm94IGlzIGFsaWduZWQgYXMg
d2VsbAotICAgIC8vIGUuZy4gPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyB3aWR0aDog
MTAwcHg7Ij5jZW50ZXJlZCB0ZXh0PC9kaXY+IDogdGhlIGxpbmUgYm94IHdpbGwgYWxzbyBiZSBj
ZW50ZXJlZAotICAgIC8vIGFzIG9wcG9zZWQgdG8gc3RhcnQgYXQgMHB4IGFsbCB0aGUgd2F5IHRv
IFtjZW50ZXJlZCB0ZXh0XSBydW4ncyByaWdodCBlZGdlLgotICAgIG1fbGluZUJveC5tb3ZlSG9y
aXpvbnRhbGx5KCphZGp1c3RtZW50KTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykKLSAg
ICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoKmFkanVzdG1lbnQpOwotfQotCi12b2lkIExpbmVD
b250ZW50QWxpZ25lcjo6YWxpZ25WZXJ0aWNhbGx5KCkKLXsKLSAgICBhdXRvIHNjcm9sbGFibGVP
dmVyZmxvd1JlY3QgPSBtX2xpbmVCb3gubG9naWNhbFJlY3QoKTsKLSAgICBmb3IgKGF1dG8mIHJ1
biA6IG1fcnVucykgewotICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0
IHsgfTsKLSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxheW91dEJveCgpOwotICAgICAg
ICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7
Ci0gICAgICAgIGF1dG8gYXNjZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKTsKLQotICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ24pIHsKLSAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZToKLSAgICAgICAgICAgIGlmIChydW4uaXNMaW5lQnJl
YWsoKSB8fCBydW4uaXNUZXh0KCkpCi0gICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IG1fbGlu
ZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpIC0gYXNjZW50OwotICAgICAgICAgICAgZWxzZSBpZiAo
cnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21l
dHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAt
IGFzY2VudCAtIGJveEdlb21ldHJ5LmJvcmRlclRvcCgpIC0gYm94R2VvbWV0cnkucGFkZGluZ1Rv
cCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc0lubGlu
ZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQoKSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdTdGF0ZSA9IGxheW91dFN0
YXRlKCkuZXN0YWJsaXNoZWRJbmxpbmVGb3JtYXR0aW5nU3RhdGUoZG93bmNhc3Q8Q29udGFpbmVy
Qm94PihsYXlvdXRCb3gpKTsKLSAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVy
YXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgotICAgICAgICAgICAg
ICAgIGF1dG8gaW5saW5lQmxvY2tCYXNlbGluZSA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5SW5s
aW5lQ29udGVudCgpLT5saW5lQm94ZXMubGFzdCgpLmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhlIGlubGluZS1ibG9jaydzIGJhc2VsaW5lIG9mZnNldCBpcyByZWxhdGl2ZSB0byBp
dHMgY29udGVudCBib3guIExldCdzIGNvbnZlcnQgaXQgcmVsYXRpdmUgdG8gdGhlIG1hcmdpbiBi
b3guCi0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIF9fX19fX19fX19fX19fXyA8LSBtYXJn
aW4gYm94Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfAotICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgIHwgIF9fX19fX19fX19fXyAgPC0gYm9yZGVyIGJveAotICAgICAgICAgICAgICAg
IC8vICAgICAgICAgIHwgfAotICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCAgX19fX19f
X19fICA8LSBjb250ZW50IGJveAotICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAg
XgotICAgICAgICAgICAgICAgIC8vICAgICAgICAgIHwgfCB8ICAgfCAgPC0gYmFzZWxpbmUgb2Zm
c2V0Ci0gICAgICAgICAgICAgICAgLy8gICAgICAgICAgfCB8IHwgICB8Ci0gICAgICAgICAgICAg
ICAgLy8gICAgIHRleHQgfCB8IHwgICB2IHRleHQKLSAgICAgICAgICAgICAgICAvLyAgICAgLS0t
LS18LXwtfC0tLS0tLS0tLS0gPC0gYmFzZWxpbmUKLSAgICAgICAgICAgICAgICAvLwotICAgICAg
ICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGF1dG8gYmFzZWxpbmVGcm9tTWFy
Z2luQm94ID0gYm94R2VvbWV0cnkubWFyZ2luQmVmb3JlKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJU
b3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgaW5saW5lQmxvY2tC
YXNlbGluZTsKLSAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbV9saW5lQm94LmFsaWdubWVu
dEJhc2VsaW5lKCkgLSBiYXNlbGluZUZyb21NYXJnaW5Cb3g7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3Ag
PSBtX2xpbmVCb3guYWxpZ25tZW50QmFzZWxpbmUoKSAtIChib3hHZW9tZXRyeS52ZXJ0aWNhbEJv
cmRlcigpICsgYm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwX2x1KSArIHJ1
bi5sb2dpY2FsUmVjdCgpLmhlaWdodCgpICsgYm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpUb3A6Ci0gICAgICAgICAgICBsb2dpY2FsVG9wID0gMF9sdTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAgIGxv
Z2ljYWxUb3AgPSBtX2xpbmVCb3gubG9naWNhbEJvdHRvbSgpIC0gcnVuLmxvZ2ljYWxSZWN0KCku
aGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgICAgICBydW4uYWRqdXN0TG9naWNhbFRvcChsb2dpY2FsVG9wKTsKLSAgICAg
ICAgLy8gQWRqdXN0IHNjcm9sbGFibGUgb3ZlcmZsb3cgaWYgdGhlIHJ1biBvdmVyZmxvd3MgdGhl
IGxpbmUuCi0gICAgICAgIHNjcm9sbGFibGVPdmVyZmxvd1JlY3QuZXhwYW5kVmVydGljYWxseVRv
Q29udGFpbihydW4ubG9naWNhbFJlY3QoKSk7Ci0gICAgICAgIC8vIENvbnZlcnQgcnVucyBmcm9t
IHJlbGF0aXZlIHRvIHRoZSBsaW5lIHRvcC9sZWZ0IHRvIHRoZSBmb3JtYXR0aW5nIHJvb3QncyBi
b3JkZXIgYm94IHRvcC9sZWZ0LgotICAgICAgICBydW4ubW92ZVZlcnRpY2FsbHkobV9saW5lQm94
LmxvZ2ljYWxUb3AoKSk7Ci0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KG1fbGluZUJveC5s
b2dpY2FsTGVmdCgpKTsKLSAgICB9Ci0gICAgbV9saW5lQm94LnNldFNjcm9sbGFibGVPdmVyZmxv
dyhzY3JvbGxhYmxlT3ZlcmZsb3dSZWN0KTsKLX0KLQotdm9pZCBMaW5lQ29udGVudEFsaWduZXI6
Omp1c3RpZnlSdW5zKElubGluZUxheW91dFVuaXQgYXZhaWxhYmxlV2lkdGgpCi17Ci0gICAgQVNT
RVJUKGF2YWlsYWJsZVdpZHRoID4gMCk7Ci0gICAgLy8gQ29sbGVjdCB0aGUgZXhwYW5zaW9uIG9w
cG9ydHVuaXR5IG51bWJlcnMgYW5kIGZpbmQgdGhlIGxhc3QgcnVuIHdpdGggY29udGVudC4KLSAg
ICBhdXRvIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSAwOwotICAgIExpbmVCdWlsZGVyOjpS
dW4qIGxhc3RSdW5XaXRoQ29udGVudCA9IG51bGxwdHI7Ci0gICAgZm9yIChhdXRvJiBydW4gOiBt
X3J1bnMpIHsKLSAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCArPSBydW4uZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudCgpOwotICAgICAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5p
c0JveCgpKQotICAgICAgICAgICAgbGFzdFJ1bldpdGhDb250ZW50ID0gJnJ1bjsKLSAgICB9Ci0g
ICAgLy8gTmVlZCB0byBmaXggdXAgdGhlIGxhc3QgcnVuJ3MgdHJhaWxpbmcgZXhwYW5zaW9uLgot
ICAgIGlmIChsYXN0UnVuV2l0aENvbnRlbnQgJiYgbGFzdFJ1bldpdGhDb250ZW50LT5oYXNFeHBh
bnNpb25PcHBvcnR1bml0eSgpKSB7Ci0gICAgICAgIC8vIFR1cm4gb2ZmIHRoZSB0cmFpbGluZyBi
aXRzIGZpcnN0IGFuZCBhZGQgdGhlIGZvcmJpZCB0cmFpbGluZyBleHBhbnNpb24uCi0gICAgICAg
IGF1dG8gbGVmdEV4cGFuc2lvbiA9IGxhc3RSdW5XaXRoQ29udGVudC0+ZXhwYW5zaW9uQmVoYXZp
b3IoKSAmIExlZnRFeHBhbnNpb25NYXNrOwotICAgICAgICBsYXN0UnVuV2l0aENvbnRlbnQtPnNl
dEV4cGFuc2lvbkJlaGF2aW9yKGxlZnRFeHBhbnNpb24gfCBGb3JiaWRSaWdodEV4cGFuc2lvbik7
Ci0gICAgfQotICAgIC8vIE5vdGhpbmcgdG8gZGlzdHJpYnV0ZT8KLSAgICBpZiAoIWV4cGFuc2lv
bk9wcG9ydHVuaXR5Q291bnQpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBEaXN0cmlidXRlIHRo
ZSBleHRyYSBzcGFjZS4KLSAgICBhdXRvIGV4cGFuc2lvblRvRGlzdHJpYnV0ZSA9IGF2YWlsYWJs
ZVdpZHRoIC8gZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudDsKLSAgICBJbmxpbmVMYXlvdXRVbml0
IGFjY3VtdWxhdGVkRXhwYW5zaW9uID0gMDsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IG1fcnVucykg
ewotICAgICAgICAvLyBFeHBhbmQgYW5kIG1vdmVzIHJ1bnMgYnkgdGhlIGFjY3VtdWxhdGVkIGV4
cGFuc2lvbi4KLSAgICAgICAgaWYgKCFydW4uaGFzRXhwYW5zaW9uT3Bwb3J0dW5pdHkoKSkgewot
ICAgICAgICAgICAgcnVuLm1vdmVIb3Jpem9udGFsbHkoYWNjdW11bGF0ZWRFeHBhbnNpb24pOwot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJUKHJ1bi5leHBh
bnNpb25PcHBvcnR1bml0eUNvdW50KCkpOwotICAgICAgICBhdXRvIGNvbXB1dGVkRXhwYW5zaW9u
ID0gZXhwYW5zaW9uVG9EaXN0cmlidXRlICogcnVuLmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQo
KTsKLSAgICAgICAgcnVuLnNldENvbXB1dGVkSG9yaXpvbnRhbEV4cGFuc2lvbihjb21wdXRlZEV4
cGFuc2lvbik7Ci0gICAgICAgIHJ1bi5tb3ZlSG9yaXpvbnRhbGx5KGFjY3VtdWxhdGVkRXhwYW5z
aW9uKTsKLSAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gY29tcHV0ZWRFeHBhbnNpb247
Ci0gICAgfQotfQotCi12b2lkIExpbmVDb250ZW50QWxpZ25lcjo6YWRqdXN0QmFzZWxpbmVBbmRM
aW5lSGVpZ2h0KCkKLXsKLSAgICB1bnNpZ25lZCBpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwg
PSAwOwotICAgIGF1dG8gaGFzU2VlbkRpcmVjdFRleHRPckxpbmVCcmVhayA9IGZhbHNlOwotICAg
IGZvciAoYXV0byYgcnVuIDogbV9ydW5zKSB7Ci0gICAgICAgIGF1dG8mIGxheW91dEJveCA9IHJ1
bi5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
LQotICAgICAgICBydW4uc2V0TG9naWNhbEhlaWdodChydW5Db250ZW50SGVpZ2h0KHJ1bikpOwot
Ci0gICAgICAgIGlmIChydW4uaXNUZXh0KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAg
ICAgICAgIGlmIChpbmxpbmVDb250YWluZXJOZXN0aW5nTGV2ZWwpIHsKLSAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IGFkanVzdGVkIHRoZSBsaW5lIGhlaWdodC9iYXNlbGluZSB0aHJv
dWdoIHRoZSBwYXJlbnQgaW5saW5lIGNvbnRhaW5lci4gCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaGFzU2VlbkRpcmVjdFRleHRPckxp
bmVCcmVhaykgewotICAgICAgICAgICAgICAgIC8vIGUuZyBkaXY+Zmlyc3QgdGV4dDwvZGl2PiBv
ciA8ZGl2PjxzcGFuPm5lc3RlZDxzcGFuPmZpcnN0IGRpcmVjdCB0ZXh0PC9kaXY+LgotICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaGFzU2VlbkRp
cmVjdFRleHRPckxpbmVCcmVhayA9IHRydWU7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250YWluZXJTdGFydCgpKSB7Ci0gICAgICAgICAg
ICArK2lubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKLSAgICAgICAgICAgIC8vIElubGluZSBj
b250YWluZXJzIHN0cmV0Y2ggdGhlIGxpbmUgYnkgdGhlaXIgZm9udCBzaXplLgotICAgICAgICAg
ICAgLy8gVmVydGljYWwgbWFyZ2lucywgcGFkZGluZ3MgYW5kIGJvcmRlcnMgZG9uJ3QgY29udHJp
YnV0ZSB0byB0aGUgbGluZSBoZWlnaHQuCi0gICAgICAgICAgICBhdXRvJiBmb250TWV0cmljcyA9
IHN0eWxlLmZvbnRNZXRyaWNzKCk7Ci0gICAgICAgICAgICBpZiAoc3R5bGUudmVydGljYWxBbGln
bigpID09IFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBo
YWxmTGVhZGluZyA9IExpbmVCdWlsZGVyOjpoYWxmTGVhZGluZ01ldHJpY3MoZm9udE1ldHJpY3Ms
IHN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICAvLyBCb3RoIGhh
bGZsZWFkaW5nIGFzY2VudCBhbmQgZGVzY2VudCBjb3VsZCBiZSBuZWdhdGl2ZSAodGFsbCBmb250
IHZzLiBzbWFsbCBsaW5lLWhlaWdodCB2YWx1ZSkKLSAgICAgICAgICAgICAgICBpZiAoaGFsZkxl
YWRpbmcuZGVzY2VudCA+IDApCi0gICAgICAgICAgICAgICAgICAgIG1fbGluZUJveC5zZXREZXNj
ZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmRlc2NlbnQpOwotICAgICAgICAgICAgICAgIGlmICho
YWxmTGVhZGluZy5hc2NlbnQgPiAwKQotICAgICAgICAgICAgICAgICAgICBtX2xpbmVCb3guc2V0
QXNjZW50SWZHcmVhdGVyKGhhbGZMZWFkaW5nLmFzY2VudCk7Ci0gICAgICAgICAgICAgICAgbV9s
aW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobV9saW5lQm94LmFzY2VudEFuZERlc2Nl
bnQoKS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtX2xp
bmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihmb250TWV0cmljcy5oZWlnaHQoKSk7Ci0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChydW4uaXNDb250
YWluZXJFbmQoKSkgewotICAgICAgICAgICAgLy8gVGhlIGxpbmUncyBiYXNlbGluZSBhbmQgaGVp
Z2h0IGhhdmUgYWxyZWFkeSBiZWVuIGFkanVzdGVkIGF0IENvbnRhaW5lclN0YXJ0LgotICAgICAg
ICAgICAgQVNTRVJUKGlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbCk7Ci0gICAgICAgICAgICAt
LWlubGluZUNvbnRhaW5lck5lc3RpbmdMZXZlbDsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHJ1bi5pc0JveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94
KTsKLSAgICAgICAgICAgIGF1dG8gbWFyZ2luQm94SGVpZ2h0ID0gYm94R2VvbWV0cnkubWFyZ2lu
Qm94SGVpZ2h0KCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUudmVydGljYWxBbGlnbigp
KSB7Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0Qm94LmVz
dGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewotICAgICAgICAgICAgICAgICAg
ICAvLyBJbmxpbmUtYmxvY2tzIHdpdGggaW5saW5lIGNvbnRlbnQgYWx3YXlzIGhhdmUgYmFzZWxp
bmVzLgotICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRT
dGF0ZSgpLmVzdGFibGlzaGVkSW5saW5lRm9ybWF0dGluZ1N0YXRlKGRvd25jYXN0PENvbnRhaW5l
ckJveD4obGF5b3V0Qm94KSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIGhhcyB0byBi
ZSBhdCBsZWFzdCBvbmUgbGluZSAtZXZlbiBpZiBpdCBpcyBlbXB0eS4KLSAgICAgICAgICAgICAg
ICAgICAgYXV0byYgbGFzdExpbmVCb3ggPSBmb3JtYXR0aW5nU3RhdGUuZGlzcGxheUlubGluZUNv
bnRlbnQoKS0+bGluZUJveGVzLmxhc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgYXV0byBiZWZv
cmVIZWlnaHQgPSBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRl
clRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fbGluZUJveC5zZXRBbGlnbm1lbnRCYXNlbGluZUlmR3JlYXRlcihiZWZvcmVI
ZWlnaHQgKyBsYXN0TGluZUJveC5iYXNlbGluZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9s
aW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBOb24gaW5saW5lLWJs
b2NrIGJveGVzIHNpdCBvbiB0aGUgYmFzZWxpbmUgKGluY2x1ZGluZyB0aGVpciBib3R0b20gbWFy
Z2luKS4KLSAgICAgICAgICAgICAgICAgICAgbV9saW5lQm94LnNldEFzY2VudElmR3JlYXRlciht
YXJnaW5Cb3hIZWlnaHQpOwotICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgbmVnYXRpdmUg
ZGVzY2VudCAoeWVzLCBuZWdhdGl2ZSBkZXNjZW50IGlzIGEgdGhpbmcpLgotICAgICAgICAgICAg
ICAgICAgICBtX2xpbmVCb3guc2V0TG9naWNhbEhlaWdodElmR3JlYXRlcihtYXJnaW5Cb3hIZWln
aHQgKyBzdGQ6Om1heDxJbmxpbmVMYXlvdXRVbml0PigwLCBtX2xpbmVCb3guYXNjZW50QW5kRGVz
Y2VudCgpLmRlc2NlbnQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoK
LSAgICAgICAgICAgICAgICAvLyBUb3AgYWxpZ24gY29udGVudCBuZXZlciBjaGFuZ2VzIHRoZSBi
YXNlbGluZSwgaXQgb25seSBwdXNoZXMgdGhlIGJvdHRvbSBvZiB0aGUgbGluZSBmdXJ0aGVyIGRv
d24uCi0gICAgICAgICAgICAgICAgbV9saW5lQm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIo
bWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOiB7Ci0gICAgICAgICAgICAgICAgLy8gQm90dG9tIGFs
aWduZWQsIHRhbGwgY29udGVudCBwdXNoZXMgdGhlIGJhc2VsaW5lIGZ1cnRoZXIgZG93biBmcm9t
IHRoZSBsaW5lIHRvcC4KLSAgICAgICAgICAgICAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0g
bV9saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBpZiAobWFyZ2luQm94
SGVpZ2h0ID4gbGluZUxvZ2ljYWxIZWlnaHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9saW5l
Qm94LnNldExvZ2ljYWxIZWlnaHRJZkdyZWF0ZXIobWFyZ2luQm94SGVpZ2h0KTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9saW5lQm94LnNldEFsaWdubWVudEJhc2VsaW5lSWZHcmVhdGVyKG1fbGlu
ZUJveC5hbGlnbm1lbnRCYXNlbGluZSgpICsgKG1hcmdpbkJveEhlaWdodCAtIGxpbmVMb2dpY2Fs
SGVpZ2h0KSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUhhbmdp
bmdDb250ZW50IExpbmVDb250ZW50QWxpZ25lcjo6Y29sbGVjdEhhbmdpbmdDb250ZW50KExpbmVC
dWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQgaXNMYXN0TGluZVdpdGhJbmxpbmVD
b250ZW50KSBjb25zdAotewotICAgIGF1dG8gaGFuZ2luZ0NvbnRlbnQgPSBIYW5naW5nQ29udGVu
dCB7IH07Ci0gICAgaWYgKGlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCA9PSBMaW5lQnVpbGRl
cjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpZZXMpCi0gICAgICAgIGhhbmdpbmdDb250
ZW50LnNldElzQ29uZGl0aW9uYWwoKTsKLSAgICBmb3IgKGF1dG8mIHJ1biA6IFdURjo6bWFrZVJl
dmVyc2VkUmFuZ2UobV9ydW5zKSkgewotICAgICAgICBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQo
KSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBpZiAocnVuLmlzTGluZUJyZWFrKCkpIHsKLSAgICAgICAgICAgIGhhbmdpbmdDb250ZW50LnNl
dElzQ29uZGl0aW9uYWwoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAg
ICAgIGlmICghcnVuLmhhc1RyYWlsaW5nV2hpdGVzcGFjZSgpKQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIC8vIENoZWNrIGlmIHdlIGhhdmUgYSBwcmVzZXJ2ZWQgb3IgaHVuZyB3aGl0ZXNw
YWNlLgotICAgICAgICBpZiAocnVuLnN0eWxlKCkud2hpdGVTcGFjZSgpICE9IFdoaXRlU3BhY2U6
OlByZVdyYXApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgLy8gVGhpcyBpcyBlaXRoZXIg
YSBub3JtYWwgb3IgY29uZGl0aW9uYWxseSBoYW5naW5nIHRyYWlsaW5nIHdoaXRlc3BhY2UuCi0g
ICAgICAgIGhhbmdpbmdDb250ZW50LmV4cGFuZChydW4udHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGgo
KSk7Ci0gICAgfQotICAgIHJldHVybiBoYW5naW5nQ29udGVudDsKLX0KLQotSW5saW5lTGF5b3V0
VW5pdCBMaW5lQ29udGVudEFsaWduZXI6OnJ1bkNvbnRlbnRIZWlnaHQoY29uc3QgTGluZUJ1aWxk
ZXI6OlJ1biYgcnVuKSBjb25zdAotewotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcnVuLnN0eWxl
KCkuZm9udE1ldHJpY3MoKTsKLSAgICBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc0xpbmVCcmVh
aygpKQotICAgICAgICByZXR1cm4gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0KLSAgICBpZiAocnVu
LmlzQ29udGFpbmVyU3RhcnQoKSB8fCBydW4uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgcmV0
dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwotCi0gICAgYXV0byYgbGF5b3V0Qm94ID0gcnVuLmxh
eW91dEJveCgpOwotICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwotICAgIGlmIChsYXlvdXRCb3guaXNSZXBsYWNlZEJv
eCgpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICByZXR1cm4g
Ym94R2VvbWV0cnkuY29udGVudEJveEhlaWdodCgpOwotCi0gICAgLy8gTm9uLXJlcGxhY2VkIGlu
bGluZSBib3ggKGUuZy4gaW5saW5lLWJsb2NrKS4gSXQgbG9va3MgYSBiaXQgbWlzbGVhZGluZyBi
dXQgdGhlaXIgbWFyZ2luIGJveCBpcyBjb25zaWRlcmVkIHRoZSBjb250ZW50IGhlaWdodCBoZXJl
LgotICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hIZWlnaHQoKTsKLX0KLQotTGluZUJ1
aWxkZXI6OkxpbmVCdWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVG
b3JtYXR0aW5nQ29udGV4dCwgT3B0aW9uYWw8VGV4dEFsaWduTW9kZT4gaG9yaXpvbnRhbEFsaWdu
bWVudCwgSW50cmluc2ljU2l6aW5nIGludHJpbnNpY1NpemluZykKK0xpbmVCdWlsZGVyOjpMaW5l
QnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dCYgaW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQpCiAgICAgOiBtX2lubGluZUZvcm1hdHRpbmdDb250ZXh0KGlubGluZUZvcm1hdHRpbmdD
b250ZXh0KQogICAgICwgbV90cmltbWFibGVUcmFpbGluZ0NvbnRlbnQobV9ydW5zKQotICAgICwg
bV9ob3Jpem9udGFsQWxpZ25tZW50KGhvcml6b250YWxBbGlnbm1lbnQpCi0gICAgLCBtX2lzSW50
cmluc2ljU2l6aW5nKGludHJpbnNpY1NpemluZyA9PSBJbnRyaW5zaWNTaXppbmc6OlllcykKICAg
ICAsIG1fc2hvdWxkSWdub3JlVHJhaWxpbmdMZXR0ZXJTcGFjaW5nKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlv
bkVuYWJsZWQoKSkKIHsKIH0KQEAgLTQwNSw3ICs3Nyw3IEBAIHZvaWQgTGluZUJ1aWxkZXI6OmNs
ZWFyKCkKICAgICBtX2xpbmVJc1Zpc3VhbGx5RW1wdHlCZWZvcmVUcmltbWFibGVUcmFpbGluZ0Nv
bnRlbnQgPSB7IH07CiB9CiAKLXZvaWQgTGluZUJ1aWxkZXI6OmNsb3NlKElzTGFzdExpbmVXaXRo
SW5saW5lQ29udGVudCBpc0xhc3RMaW5lKQordm9pZCBMaW5lQnVpbGRlcjo6Y2xvc2UoKQogewog
I2lmIEFTU0VSVF9FTkFCTEVECiAgICAgbV9pc0Nsb3NlZCA9IHRydWU7CkBAIC00MTQsMzQgKzg2
LDYgQEAgdm9pZCBMaW5lQnVpbGRlcjo6Y2xvc2UoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50
IGlzTGFzdExpbmUpCiAgICAgLy8gMi4gQWxpZ24gbWVyZ2VkIHJ1bnMgYm90aCB2ZXJ0aWNhbGx5
IGFuZCBob3Jpem9udGFsbHkuCiAgICAgcmVtb3ZlVHJhaWxpbmdUcmltbWFibGVDb250ZW50KCk7
CiAgICAgdmlzdWFsbHlDb2xsYXBzZVByZVdyYXBPdmVyZmxvd0NvbnRlbnQoKTsKLSAgICBpZiAo
bV9pc0ludHJpbnNpY1NpemluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjb250ZW50
QWxpZ25lciA9IExpbmVDb250ZW50QWxpZ25lciB7IGZvcm1hdHRpbmdDb250ZXh0KCksIG1fbGlu
ZUJveCwgbV9ydW5zLCBhdmFpbGFibGVXaWR0aCgpIH07Ci0gICAgY29udGVudEFsaWduZXIuYWRq
dXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KCk7Ci0gICAgaWYgKGlzVmlzdWFsbHlFbXB0eSgpKSB7
Ci0gICAgICAgIG1fbGluZUJveC5yZXNldEFsaWdubWVudEJhc2VsaW5lKCk7Ci0gICAgICAgIG1f
bGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHsgfSk7Ci0gICAgfQotICAgIC8vIFJlbW92ZSBkZXNj
ZW50IHdoZW4gYWxsIGNvbnRlbnQgaXMgYmFzZWxpbmUgYWxpZ25lZCBidXQgbm9uZSBvZiB0aGVt
IGhhdmUgZGVzY2VudC4KLSAgICBpZiAoZm9ybWF0dGluZ0NvbnRleHQoKS5xdWlya3MoKS5saW5l
RGVzY2VudE5lZWRzQ29sbGFwc2luZyhtX3J1bnMpKSB7Ci0gICAgICAgIG1fbGluZUJveC5zaHJp
bmtWZXJ0aWNhbGx5KG1fbGluZUJveC5hc2NlbnRBbmREZXNjZW50KCkuZGVzY2VudCk7Ci0gICAg
ICAgIG1fbGluZUJveC5yZXNldERlc2NlbnQoKTsKLSAgICB9Ci0gICAgY29udGVudEFsaWduZXIu
YWxpZ25WZXJ0aWNhbGx5KCk7Ci0KLSAgICBhdXRvIGNvbXB1dGVkSG9yaXpvbnRhbEFsaWdubWVu
dCA9IFsmXSB7Ci0gICAgICAgIEFTU0VSVChtX2hvcml6b250YWxBbGlnbm1lbnQpOwotICAgICAg
ICBpZiAobV9ob3Jpem9udGFsQWxpZ25tZW50ICE9IFRleHRBbGlnbk1vZGU6Okp1c3RpZnkpCi0g
ICAgICAgICAgICByZXR1cm4gKm1faG9yaXpvbnRhbEFsaWdubWVudDsKLSAgICAgICAgLy8gVGV4
dCBpcyBqdXN0aWZpZWQgYWNjb3JkaW5nIHRvIHRoZSBtZXRob2Qgc3BlY2lmaWVkIGJ5IHRoZSB0
ZXh0LWp1c3RpZnkgcHJvcGVydHksCi0gICAgICAgIC8vIGluIG9yZGVyIHRvIGV4YWN0bHkgZmls
bCB0aGUgbGluZSBib3guIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGJ5IHRleHQtYWxpZ24t
bGFzdCwKLSAgICAgICAgLy8gdGhlIGxhc3QgbGluZSBiZWZvcmUgYSBmb3JjZWQgYnJlYWsgb3Ig
dGhlIGVuZCBvZiB0aGUgYmxvY2sgaXMgc3RhcnQtYWxpZ25lZC4KLSAgICAgICAgaWYgKG1fcnVu
cy5sYXN0KCkuaXNMaW5lQnJlYWsoKSB8fCBpc0xhc3RMaW5lID09IExpbmVCdWlsZGVyOjpJc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllcykKLSAgICAgICAgICAgIHJldHVybiBUZXh0QWxp
Z25Nb2RlOjpTdGFydDsKLSAgICAgICAgcmV0dXJuIFRleHRBbGlnbk1vZGU6Okp1c3RpZnk7Ci0g
ICAgfTsKLSAgICBjb250ZW50QWxpZ25lci5hbGlnbkhvcml6b250YWxseShjb21wdXRlZEhvcml6
b250YWxBbGlnbm1lbnQoKSwgaXNMYXN0TGluZSk7CiB9CiAKIHZvaWQgTGluZUJ1aWxkZXI6OnJl
bW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpCkBAIC00NTIsMTAgKzk2LDEwIEBAIHZvaWQg
TGluZUJ1aWxkZXI6OnJlbW92ZVRyYWlsaW5nVHJpbW1hYmxlQ29udGVudCgpCiAgICAgLy8gQ29t
cGxleCBsaW5lIGxheW91dCBxdWlyazoga2VlcCB0aGUgdHJhaWxpbmcgd2hpdGVzcGFjZSBhcm91
bmQgd2hlbiBpdCBpcyBmb2xsb3dlZCBieSBhIGxpbmUgYnJlYWssIHVubGVzcyB0aGUgY29udGVu
dCBvdmVyZmxvd3MgdGhlIGxpbmUuCiAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkubGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQo
KSkgewogICAgICAgICBhdXRvIGlzVGV4dEFsaWduUmlnaHQgPSBbJl0gewotICAgICAgICAgICAg
QVNTRVJUKG1faG9yaXpvbnRhbEFsaWdubWVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbV9ob3Jp
em9udGFsQWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6OlJpZ2h0Ci0gICAgICAgICAgICAgICAg
fHwgbV9ob3Jpem9udGFsQWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0Ci0g
ICAgICAgICAgICAgICAgfHwgbV9ob3Jpem9udGFsQWxpZ25tZW50ID09IFRleHRBbGlnbk1vZGU6
OkVuZDsKKyAgICAgICAgICAgIGF1dG8gdGV4dEFsaWduID0gZm9ybWF0dGluZ0NvbnRleHQoKS5y
b290KCkuc3R5bGUoKS50ZXh0QWxpZ24oKTsKKyAgICAgICAgICAgIHJldHVybiB0ZXh0QWxpZ24g
PT0gVGV4dEFsaWduTW9kZTo6UmlnaHQKKyAgICAgICAgICAgICAgICB8fCB0ZXh0QWxpZ24gPT0g
VGV4dEFsaWduTW9kZTo6V2ViS2l0UmlnaHQKKyAgICAgICAgICAgICAgICB8fCB0ZXh0QWxpZ24g
PT0gVGV4dEFsaWduTW9kZTo6RW5kOwogICAgICAgICAgICAgfSgpOwogCiAgICAgICAgIGlmICht
X3J1bnMubGFzdCgpLmlzTGluZUJyZWFrKCkgJiYgYXZhaWxhYmxlV2lkdGgoKSA+PSAwICYmICFp
c1RleHRBbGlnblJpZ2h0KSB7CkBAIC03MDMsMTEgKzM0Nyw3IEBAIGJvb2wgTGluZUJ1aWxkZXI6
OmlzVmlzdWFsbHlOb25FbXB0eShjb25zdCBSdW4mIHJ1bikgY29uc3QKICAgICAgICAgaWYgKHJ1
bi5sYXlvdXRCb3goKS5pc1JlcGxhY2VkQm94KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgQVNTRVJUKHJ1bi5sYXlvdXRCb3goKS5pc0lubGluZUJsb2NrQm94KCkgfHwgcnVu
LmxheW91dEJveCgpLmlzSW5saW5lVGFibGVCb3goKSk7Ci0gICAgICAgIGlmICghcnVuLmxvZ2lj
YWxXaWR0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAobV9pc0lu
dHJpbnNpY1NpemluZyB8fCBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KHJ1bi5s
YXlvdXRCb3goKSkuaGVpZ2h0KCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gcnVuLmxvZ2ljYWxXaWR0aCgpOwogICAgIH0K
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtODk0LDcgKzUzNCw3IEBAIHZvaWQgTGlu
ZUJ1aWxkZXI6OlJ1bjo6c2V0RXhwYW5zaW9uQmVoYXZpb3IoRXhwYW5zaW9uQmVoYXZpb3IgZXhw
YW5zaW9uQmVoYXZpb3IpCiAgICAgbV9leHBhbnNpb24uYmVoYXZpb3IgPSBleHBhbnNpb25CZWhh
dmlvcjsKIH0KIAotaW5saW5lIEV4cGFuc2lvbkJlaGF2aW9yIExpbmVCdWlsZGVyOjpSdW46OmV4
cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKK0V4cGFuc2lvbkJlaGF2aW9yIExpbmVCdWlsZGVyOjpS
dW46OmV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaXNUZXh0KCkpOwog
ICAgIHJldHVybiBtX2V4cGFuc2lvbi5iZWhhdmlvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQnVpbGRlci5oCmluZGV4
IDRiNmNlYmYyMTI3NThkMTllN2Q0NjdlNjI3MzJmYTY5YjEyMTliMDcuLjhlNGQ5NTYwYTExNjdk
MTcwZDY4N2Q3NWMwMTE1ZDE5YmJiYWE1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJ1aWxkZXIuaApAQCAtNDgs
MTQgKzQ4LDExIEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBsaW5lSXNDb25zdHJhaW5lZEJ5Rmxv
YXQgeyBmYWxzZSB9OwogICAgIH07CiAKLSAgICBlbnVtIGNsYXNzIEludHJpbnNpY1NpemluZyB7
IE5vLCBZZXMgfTsKLSAgICBMaW5lQnVpbGRlcihjb25zdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dCYsIE9wdGlvbmFsPFRleHRBbGlnbk1vZGU+LCBJbnRyaW5zaWNTaXppbmcpOworICAgIExpbmVC
dWlsZGVyKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Jik7CiAgICAgfkxpbmVCdWlsZGVy
KCk7CiAKICAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgQ29uc3RyYWludHMmKTsKLQotICAgIGVu
dW0gY2xhc3MgSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50IHsgTm8sIFllcyB9OwotICAgIHZv
aWQgY2xvc2UoSXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50KTsKKyAgICB2b2lkIGNsb3NlKCk7
CiAKICAgICB2b2lkIGFwcGVuZChjb25zdCBJbmxpbmVJdGVtJiwgSW5saW5lTGF5b3V0VW5pdCBs
b2dpY2FsV2lkdGgpOwogICAgIHZvaWQgYXBwZW5kUGFydGlhbFRyYWlsaW5nVGV4dEl0ZW0oY29u
c3QgSW5saW5lVGV4dEl0ZW0mLCBJbmxpbmVMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCwgYm9vbCBu
ZWVkc0h5cGVuKTsKQEAgLTY4LDYgKzY1LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNUcmFpbGlu
Z1J1bkZ1bGx5VHJpbW1hYmxlKCkgY29uc3QgeyByZXR1cm4gbV90cmltbWFibGVUcmFpbGluZ0Nv
bnRlbnQuaXNUcmFpbGluZ1J1bkZ1bGx5VHJpbW1hYmxlKCk7IH0KIAogICAgIGNvbnN0IExpbmVC
b3gmIGxpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX2xpbmVCb3g7IH0KKyAgICBMaW5lQm94JiBs
aW5lQm94KCkgeyByZXR1cm4gbV9saW5lQm94OyB9CiAgICAgdm9pZCBtb3ZlTG9naWNhbExlZnQo
SW5saW5lTGF5b3V0VW5pdCk7CiAgICAgdm9pZCBtb3ZlTG9naWNhbFJpZ2h0KElubGluZUxheW91
dFVuaXQpOwogICAgIHZvaWQgc2V0SGFzSW50cnVzaXZlRmxvYXQoKSB7IG1faGFzSW50cnVzaXZl
RmxvYXQgPSB0cnVlOyB9CkBAIC0xNDQsNiArMTQyLDcgQEAgcHVibGljOgogICAgIH07CiAgICAg
dXNpbmcgUnVuTGlzdCA9IFZlY3RvcjxSdW4sIDEwPjsKICAgICBjb25zdCBSdW5MaXN0JiBydW5z
KCkgY29uc3QgeyByZXR1cm4gbV9ydW5zOyB9CisgICAgUnVuTGlzdCYgcnVucygpIHsgcmV0dXJu
IG1fcnVuczsgfQogCiAgICAgc3RhdGljIEFzY2VudEFuZERlc2NlbnQgaGFsZkxlYWRpbmdNZXRy
aWNzKGNvbnN0IEZvbnRNZXRyaWNzJiwgSW5saW5lTGF5b3V0VW5pdCBsaW5lTG9naWNhbEhlaWdo
dCk7CiAKQEAgLTE5OCw4ICsxOTcsNiBAQCBwcml2YXRlOgogICAgIFJ1bkxpc3QgbV9ydW5zOwog
ICAgIFRyaW1tYWJsZVRyYWlsaW5nQ29udGVudCBtX3RyaW1tYWJsZVRyYWlsaW5nQ29udGVudDsK
ICAgICBJbmxpbmVMYXlvdXRVbml0IG1fbGluZUxvZ2ljYWxXaWR0aCB7IDAgfTsKLSAgICBPcHRp
b25hbDxUZXh0QWxpZ25Nb2RlPiBtX2hvcml6b250YWxBbGlnbm1lbnQ7Ci0gICAgYm9vbCBtX2lz
SW50cmluc2ljU2l6aW5nIHsgZmFsc2UgfTsKICAgICBib29sIG1faGFzSW50cnVzaXZlRmxvYXQg
eyBmYWxzZSB9OwogICAgIExpbmVCb3ggbV9saW5lQm94OwogICAgIE9wdGlvbmFsPGJvb2w+IG1f
bGluZUlzVmlzdWFsbHlFbXB0eUJlZm9yZVRyaW1tYWJsZVRyYWlsaW5nQ29udGVudDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRD
b250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVM
YXlvdXRDb250ZXh0LmNwcAppbmRleCA1OGRlNjEzYTBmMzgzMjc5ZjkxYjdmNDNhYTk4MGNjOWMz
ODdkMDljLi44MDJiZWRkOGQ3MzE3NTI1ODMzYTQ3NDA4ZGYxMGQ1NDE3OGIyOTk4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGlu
ZUxheW91dENvbnRleHQuY3BwCkBAIC0zMzIsMjIgKzMzMiw3IEBAIExpbmVMYXlvdXRDb250ZXh0
OjpMaW5lQ29udGVudCBMaW5lTGF5b3V0Q29udGV4dDo6Y2xvc2UoTGluZUJ1aWxkZXImIGxpbmUs
IGNvbnN0CiAgICAgYXV0byB0cmFpbGluZ0lubGluZUl0ZW1JbmRleCA9IGxheW91dFJhbmdlLnN0
YXJ0ICsgbnVtYmVyT2ZDb21taXR0ZWRJdGVtcyAtIDE7CiAgICAgYXV0byBsaW5lUmFuZ2UgPSBJ
bmxpbmVJdGVtUmFuZ2UgeyBsYXlvdXRSYW5nZS5zdGFydCwgdHJhaWxpbmdJbmxpbmVJdGVtSW5k
ZXggKyAxIH07CiAgICAgQVNTRVJUKGxpbmVSYW5nZS5lbmQgPD0gbGF5b3V0UmFuZ2UuZW5kKTsK
LQotICAgIGF1dG8gaXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50ID0gWyZdIHsKLSAgICAgICAg
aWYgKGxpbmVSYW5nZS5lbmQgPT0gbGF5b3V0UmFuZ2UuZW5kKQotICAgICAgICAgICAgcmV0dXJu
IExpbmVCdWlsZGVyOjpJc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQ6OlllczsKLSAgICAgICAg
aWYgKHBhcnRpYWxDb250ZW50KQotICAgICAgICAgICAgcmV0dXJuIExpbmVCdWlsZGVyOjpJc0xh
c3RMaW5lV2l0aElubGluZUNvbnRlbnQ6Ok5vOwotICAgICAgICAvLyBPbWl0IGZsb2F0cyB0byBz
ZWUgaWYgdGhpcyBpcyB0aGUgbGFzdCBsaW5lIHdpdGggaW5saW5lIGNvbnRlbnQuCi0gICAgICAg
IGZvciAoYXV0byBpID0gbGF5b3V0UmFuZ2UuZW5kOyBpLS07KSB7Ci0gICAgICAgICAgICBpZiAo
IW1faW5saW5lSXRlbXNbaV0uaXNGbG9hdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBpID09
IHRyYWlsaW5nSW5saW5lSXRlbUluZGV4ID8gTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5s
aW5lQ29udGVudDo6WWVzIDogTGluZUJ1aWxkZXI6OklzTGFzdExpbmVXaXRoSW5saW5lQ29udGVu
dDo6Tm87Ci0gICAgICAgIH0KLSAgICAgICAgLy8gVGhlcmUgaGFzIHRvIGJlIGF0IGxlYXN0IG9u
ZSBub24tZmxvYXQgaXRlbS4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAg
IHJldHVybiBMaW5lQnVpbGRlcjo6SXNMYXN0TGluZVdpdGhJbmxpbmVDb250ZW50OjpObzsKLSAg
ICB9KCk7Ci0gICAgbGluZS5jbG9zZShpc0xhc3RMaW5lV2l0aElubGluZUNvbnRlbnQpOworICAg
IGxpbmUuY2xvc2UoKTsKICAgICAvLyBBZGp1c3QgaHlwaGVuYXRlZCBsaW5lIGNvdW50LgogICAg
IG1fc3VjY2Vzc2l2ZUh5cGhlbmF0ZWRMaW5lQ291bnQgPSBwYXJ0aWFsQ29udGVudCAmJiBwYXJ0
aWFsQ29udGVudC0+dHJhaWxpbmdDb250ZW50SGFzSHlwaGVuID8gbV9zdWNjZXNzaXZlSHlwaGVu
YXRlZExpbmVDb3VudCArIDEgOiAwOwogICAgIHJldHVybiBMaW5lQ29udGVudCB7IHBhcnRpYWxD
b250ZW50LCBsaW5lUmFuZ2UsIFdURk1vdmUobV9mbG9hdHMpIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvTGluZUxheW91dENvbnRleHQu
aAppbmRleCAzNGI4ZmNiOWRjNGFmNTdjZjI4NmRiYWU2YzA5OGUyNmNjYzM4YzAyLi4yZDJmZTVk
MjM0MDZhODMzYzgyNTdkOTg1MmEyYzgzZjUyMmVmYTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9MaW5lTGF5b3V0Q29udGV4dC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xpbmVMYXlvdXRDb250ZXh0LmgK
QEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgdW5zaWduZWQgb3ZlcmZsb3dD
b250ZW50TGVuZ3RoIHsgMCB9OwogICAgICAgICB9OwogICAgICAgICBPcHRpb25hbDxQYXJ0aWFs
Q29udGVudD4gcGFydGlhbENvbnRlbnQ7Ci0gICAgICAgIElubGluZUl0ZW1SYW5nZSBpbmxpbmVJ
dGVtczsKKyAgICAgICAgSW5saW5lSXRlbVJhbmdlIGlubGluZUl0ZW1SYW5nZTsKICAgICAgICAg
c3RydWN0IEZsb2F0IHsKICAgICAgICAgICAgIGJvb2wgaXNJbnRydXNpdmUgeyB0cnVlIH07CiAg
ICAgICAgICAgICBjb25zdCBJbmxpbmVJdGVtKiBpdGVtIHsgbnVsbHB0ciB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>