<?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>227669</bug_id>
          
          <creation_ts>2021-07-03 20:48:44 -0700</creation_ts>
          <short_desc>[LFC][TFC] Cleanup computedPreferredWidthForColumns and distributeAvailableSpace functions</short_desc>
          <delta_ts>2021-07-04 08:48:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1774702</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2021-07-03 20:48:44 -0700</bug_when>
    <thetext>split them up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774703</commentid>
    <comment_count>1</comment_count>
      <attachid>432858</attachid>
    <who name="alan">zalan</who>
    <bug_when>2021-07-03 21:01:47 -0700</bug_when>
    <thetext>Created attachment 432858
[fast-cq]Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774721</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-07-04 08:47:22 -0700</bug_when>
    <thetext>Committed r279549 (239385@main): &lt;https://commits.webkit.org/239385@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 432858.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1774722</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-04 08:48:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/80150725&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>432858</attachid>
            <date>2021-07-03 21:01:47 -0700</date>
            <delta_ts>2021-07-04 08:47:23 -0700</delta_ts>
            <desc>[fast-cq]Patch</desc>
            <filename>bug-227669-20210703210146.patch</filename>
            <type>text/plain</type>
            <size>37211</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc5NTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzAxNDI3ZTgyYjE2YTA1
NTg2MjU4NTViNjJmNTlmZjUyMWZhMTgzOS4uNDU5MTY1OTdiYjBkMDNhYWJlZjg3ZDI1MGUyZDUw
MTVhNGU3MDE1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTA3LTAzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bVEZDXSBDbGVhbnVw
IGNvbXB1dGVkUHJlZmVycmVkV2lkdGhGb3JDb2x1bW5zIGFuZCBkaXN0cmlidXRlQXZhaWxhYmxl
U3BhY2UgZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjc2NjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBMZXQncyBjcmVhdGUgc29tZSBzdWItc2NvcGVzIHdpdGhpbiB0aGVzZSBsb25nIGZ1
bmN0aW9ucyB0byBtYWtlIHRoZW0gcmVhZCBiZXR0ZXIuCisKKyAgICAgICAgKiBsYXlvdXQvZm9y
bWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZFByZWZl
cnJlZFdpZHRoRm9yQ29sdW1ucyk6CisgICAgICAgICogbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0
cy90YWJsZS9UYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmRpc3Ry
aWJ1dGVBdmFpbGFibGVTcGFjZSk6CisKIDIwMjEtMDctMDMgIEFsYW4gQnVqdGFzICA8emFsYW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gMTAwJSBwZXJjZW50IHdpZHRoIGNvbHVt
bihzKSBtYWtlIHRoZSB0YWJsZSBzdHJldGNoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJsZS9UYWJsZUZv
cm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCAxYmU4ZTVjMTkxNWMzNjYwMGE4MDM1MTg2YmQzNjY3
ODQ1NjNiYzNjLi42MTgwN2Q0MDIzZGI3N2YzYjcxMjdiZjg0NjQxZTVhNDIwNDU1NmZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3RhYmxlL1Rh
YmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mb3Jt
YXR0aW5nQ29udGV4dHMvdGFibGUvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTMyNCwx
MjcgKzMyNCwxNDYgQEAgSW50cmluc2ljV2lkdGhDb25zdHJhaW50cyBUYWJsZUZvcm1hdHRpbmdD
b250ZXh0Ojpjb21wdXRlZFByZWZlcnJlZFdpZHRoRm9yQ29sdW0KICAgICAvLyAyLiBDb2xsZWN0
IHRoZSBmaXhlZCB3aWR0aCA8Y29sPnMuCiAgICAgYXV0byYgY29sdW1uTGlzdCA9IGdyaWQuY29s
dW1ucygpLmxpc3QoKTsKICAgICBhdXRvJiBmb3JtYXR0aW5nR2VvbWV0cnkgPSB0aGlzLT5mb3Jt
YXR0aW5nR2VvbWV0cnkoKTsKLSAgICBmb3IgKGF1dG8mIGNvbHVtbiA6IGNvbHVtbkxpc3QpIHsK
LSAgICAgICAgYXV0byBmaXhlZFdpZHRoID0gWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8TGF5b3V0
VW5pdD4gewotICAgICAgICAgICAgYXV0byogY29sdW1uQm94ID0gY29sdW1uLmJveCgpOwotICAg
ICAgICAgICAgaWYgKCFjb2x1bW5Cb3gpIHsKLSAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMg
Y29sdW1ucyBkb24ndCBoYXZlIGFzc29jaWF0ZWQgbGF5b3V0IGJveGVzIGFuZCBjYW4ndCBoYXZl
IGZpeGVkIGNvbCBzaXplLgotICAgICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoYXV0byB3aWR0aCA9IGNvbHVtbkJveC0+Y29sdW1uV2lkdGgo
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gd2lkdGg7Ci0gICAgICAgICAgICByZXR1cm4gZm9y
bWF0dGluZ0dlb21ldHJ5LmNvbXB1dGVkQ29sdW1uV2lkdGgoKmNvbHVtbkJveCk7Ci0gICAgICAg
IH0oKTsKKyAgICBhdXRvIGNvbGxlY3RDb2xzRml4ZWRXaWR0aCA9IFsmXSB7CisgICAgICAgIGZv
ciAoYXV0byYgY29sdW1uIDogY29sdW1uTGlzdCkgeworICAgICAgICAgICAgYXV0byBmaXhlZFdp
ZHRoID0gWyZdICgpIC0+IHN0ZDo6b3B0aW9uYWw8TGF5b3V0VW5pdD4geworICAgICAgICAgICAg
ICAgIGF1dG8qIGNvbHVtbkJveCA9IGNvbHVtbi5ib3goKTsKKyAgICAgICAgICAgICAgICBpZiAo
IWNvbHVtbkJveCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBbm9ueW1vdXMgY29sdW1ucyBk
b24ndCBoYXZlIGFzc29jaWF0ZWQgbGF5b3V0IGJveGVzIGFuZCBjYW4ndCBoYXZlIGZpeGVkIGNv
bCBzaXplLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAoYXV0byB3aWR0aCA9IGNvbHVtbkJveC0+Y29sdW1uV2lk
dGgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdpZHRoOworICAgICAgICAgICAgICAg
IHJldHVybiBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRDb2x1bW5XaWR0aCgqY29sdW1uQm94
KTsKKyAgICAgICAgICAgIH0oKTsKICAgICAgICAgaWYgKGZpeGVkV2lkdGgpCiAgICAgICAgICAg
ICBjb2x1bW4uc2V0Q29tcHV0ZWRMb2dpY2FsV2lkdGgoeyAqZml4ZWRXaWR0aCwgTGVuZ3RoVHlw
ZTo6Rml4ZWQgfSk7Ci0gICAgfQorICAgICAgICB9CisgICAgfTsKKyAgICBjb2xsZWN0Q29sc0Zp
eGVkV2lkdGgoKTsKIAogICAgIGF1dG8gaGFzQ29sdW1uV2l0aFBlcmNlbnRXaWR0aCA9IGZhbHNl
OwogICAgIGF1dG8gaGFzQ29sdW1uV2l0aEZpeGVkV2lkdGggPSBmYWxzZTsKICAgICBWZWN0b3I8
c3RkOjpvcHRpb25hbDxMYXlvdXRVbml0Pj4gbWF4aW11bUZpeGVkQ29sdW1uV2lkdGhzKGNvbHVt
bkxpc3Quc2l6ZSgpKTsKICAgICBWZWN0b3I8c3RkOjpvcHRpb25hbDxmbG9hdD4+IG1heGltdW1Q
ZXJjZW50Q29sdW1uV2lkdGhzKGNvbHVtbkxpc3Quc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIGNl
bGwgOiBncmlkLmNlbGxzKCkpIHsKLSAgICAgICAgYXV0byYgY2VsbEJveCA9IGNlbGwtPmJveCgp
OwotICAgICAgICBBU1NFUlQoY2VsbEJveC5lc3RhYmxpc2hlc0Jsb2NrRm9ybWF0dGluZ0NvbnRl
eHQoKSk7CiAKLSAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aCA9IGZvcm1hdHRpbmdTdGF0ZS5p
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGNlbGxCb3gpOwotICAgICAgICBpZiAoIWlu
dHJpbnNpY1dpZHRoKSB7Ci0gICAgICAgICAgICBpbnRyaW5zaWNXaWR0aCA9IGZvcm1hdHRpbmdH
ZW9tZXRyeS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQ2VsbENvbnRlbnQoKmNlbGwpOwot
ICAgICAgICAgICAgZm9ybWF0dGluZ1N0YXRlLnNldEludHJpbnNpY1dpZHRoQ29uc3RyYWludHNG
b3JCb3goY2VsbEJveCwgKmludHJpbnNpY1dpZHRoKTsKLSAgICAgICAgfQotICAgICAgICBhdXRv
IGNlbGxQb3NpdGlvbiA9IGNlbGwtPnBvc2l0aW9uKCk7Ci0gICAgICAgIGF1dG8mIGNlbGxTdHls
ZSA9IGNlbGxCb3guc3R5bGUoKTsKLSAgICAgICAgLy8gRXhwYW5kIGl0IHdpdGggYm9yZGVyIGFu
ZCBwYWRkaW5nLgotICAgICAgICBhdXRvIGhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nV2lkdGgg
PSBmb3JtYXR0aW5nR2VvbWV0cnkuY29tcHV0ZWRDZWxsQm9yZGVyKCpjZWxsKS53aWR0aCgpCi0g
ICAgICAgICAgICArIGZvcm1hdHRpbmdHZW9tZXRyeS5maXhlZFZhbHVlKGNlbGxTdHlsZS5wYWRk
aW5nTGVmdCgpKS52YWx1ZV9vcigwKQotICAgICAgICAgICAgKyBmb3JtYXR0aW5nR2VvbWV0cnku
Zml4ZWRWYWx1ZShjZWxsU3R5bGUucGFkZGluZ1JpZ2h0KCkpLnZhbHVlX29yKDApOwotICAgICAg
ICBpbnRyaW5zaWNXaWR0aC0+ZXhwYW5kKGhvcml6b250YWxCb3JkZXJBbmRQYWRkaW5nV2lkdGgp
OwotICAgICAgICAvLyBTcGFubmVyIGNlbGxzIHB1dCB0aGVpciBpbnRyaW5zaWMgd2lkdGhzIG9u
IHRoZSBpbml0aWFsIHNsb3RzLgotICAgICAgICBncmlkLnNsb3QoY2VsbFBvc2l0aW9uKS0+c2V0
V2lkdGhDb25zdHJhaW50cygqaW50cmluc2ljV2lkdGgpOwotCi0gICAgICAgIGF1dG8gY2VsbExv
Z2ljYWxXaWR0aCA9IGNlbGxTdHlsZS5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgYXV0byBjb2x1
bW5JbmRleCA9IGNlbGxQb3NpdGlvbi5jb2x1bW47Ci0gICAgICAgIHN3aXRjaCAoY2VsbExvZ2lj
YWxXaWR0aC50eXBlKCkpIHsKLSAgICAgICAgY2FzZSBMZW5ndGhUeXBlOjpGaXhlZDogewotICAg
ICAgICAgICAgYXV0byBmaXhlZFdpZHRoID0gTGF5b3V0VW5pdCB7IGNlbGxMb2dpY2FsV2lkdGgu
dmFsdWUoKSB9ICsgaG9yaXpvbnRhbEJvcmRlckFuZFBhZGRpbmdXaWR0aDsKLSAgICAgICAgICAg
IG1heGltdW1GaXhlZENvbHVtbldpZHRoc1tjb2x1bW5JbmRleF0gPSBzdGQ6Om1heChtYXhpbXVt
Rml4ZWRDb2x1bW5XaWR0aHNbY29sdW1uSW5kZXhdLnZhbHVlX29yKDBfbHUpLCBmaXhlZFdpZHRo
KTsKLSAgICAgICAgICAgIGhhc0NvbHVtbldpdGhGaXhlZFdpZHRoID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgTGVuZ3RoVHlwZTo6UGVyY2VudDog
ewotICAgICAgICAgICAgbWF4aW11bVBlcmNlbnRDb2x1bW5XaWR0aHNbY29sdW1uSW5kZXhdID0g
c3RkOjptYXgobWF4aW11bVBlcmNlbnRDb2x1bW5XaWR0aHNbY29sdW1uSW5kZXhdLnZhbHVlX29y
KDAuZiksIGNlbGxMb2dpY2FsV2lkdGgucGVyY2VudCgpKTsKLSAgICAgICAgICAgIGhhc0NvbHVt
bldpdGhQZXJjZW50V2lkdGggPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgY2FzZSBMZW5ndGhUeXBlOjpSZWxhdGl2ZToKLSAgICAgICAgICAgIEFTU0VSVF9O
T1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOworICAgIGF1dG8gY29sbGVjdENlbGxzSW50cmluc2ljV2lk
dGhDb25zdHJhaW50cyA9IFsmXSB7CisgICAgICAgIGZvciAoYXV0byYgY2VsbCA6IGdyaWQuY2Vs
bHMoKSkgeworICAgICAgICAgICAgYXV0byYgY2VsbEJveCA9IGNlbGwtPmJveCgpOworICAgICAg
ICAgICAgQVNTRVJUKGNlbGxCb3guZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkp
OworCisgICAgICAgICAgICBhdXRvIGludHJpbnNpY1dpZHRoID0gZm9ybWF0dGluZ1N0YXRlLmlu
dHJpbnNpY1dpZHRoQ29uc3RyYWludHNGb3JCb3goY2VsbEJveCk7CisgICAgICAgICAgICBpZiAo
IWludHJpbnNpY1dpZHRoKSB7CisgICAgICAgICAgICAgICAgaW50cmluc2ljV2lkdGggPSBmb3Jt
YXR0aW5nR2VvbWV0cnkuaW50cmluc2ljV2lkdGhDb25zdHJhaW50c0ZvckNlbGxDb250ZW50KCpj
ZWxsKTsKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuc2V0SW50cmluc2ljV2lkdGhD
b25zdHJhaW50c0ZvckJveChjZWxsQm94LCAqaW50cmluc2ljV2lkdGgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYXV0byBjZWxsUG9zaXRpb24gPSBjZWxsLT5wb3NpdGlvbigpOworICAg
ICAgICAgICAgYXV0byYgY2VsbFN0eWxlID0gY2VsbEJveC5zdHlsZSgpOworICAgICAgICAgICAg
Ly8gRXhwYW5kIGl0IHdpdGggYm9yZGVyIGFuZCBwYWRkaW5nLgorICAgICAgICAgICAgYXV0byBo
b3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ1dpZHRoID0gZm9ybWF0dGluZ0dlb21ldHJ5LmNvbXB1
dGVkQ2VsbEJvcmRlcigqY2VsbCkud2lkdGgoKQorICAgICAgICAgICAgICAgICsgZm9ybWF0dGlu
Z0dlb21ldHJ5LmZpeGVkVmFsdWUoY2VsbFN0eWxlLnBhZGRpbmdMZWZ0KCkpLnZhbHVlX29yKDAp
CisgICAgICAgICAgICAgICAgKyBmb3JtYXR0aW5nR2VvbWV0cnkuZml4ZWRWYWx1ZShjZWxsU3R5
bGUucGFkZGluZ1JpZ2h0KCkpLnZhbHVlX29yKDApOworICAgICAgICAgICAgaW50cmluc2ljV2lk
dGgtPmV4cGFuZChob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ1dpZHRoKTsKKyAgICAgICAgICAg
IC8vIFNwYW5uZXIgY2VsbHMgcHV0IHRoZWlyIGludHJpbnNpYyB3aWR0aHMgb24gdGhlIGluaXRp
YWwgc2xvdHMuCisgICAgICAgICAgICBncmlkLnNsb3QoY2VsbFBvc2l0aW9uKS0+c2V0V2lkdGhD
b25zdHJhaW50cygqaW50cmluc2ljV2lkdGgpOworCisgICAgICAgICAgICBhdXRvIGNlbGxMb2dp
Y2FsV2lkdGggPSBjZWxsU3R5bGUubG9naWNhbFdpZHRoKCk7CisgICAgICAgICAgICBhdXRvIGNv
bHVtbkluZGV4ID0gY2VsbFBvc2l0aW9uLmNvbHVtbjsKKyAgICAgICAgICAgIHN3aXRjaCAoY2Vs
bExvZ2ljYWxXaWR0aC50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTGVuZ3RoVHlwZTo6Rml4
ZWQ6IHsKKyAgICAgICAgICAgICAgICBhdXRvIGZpeGVkV2lkdGggPSBMYXlvdXRVbml0IHsgY2Vs
bExvZ2ljYWxXaWR0aC52YWx1ZSgpIH0gKyBob3Jpem9udGFsQm9yZGVyQW5kUGFkZGluZ1dpZHRo
OworICAgICAgICAgICAgICAgIG1heGltdW1GaXhlZENvbHVtbldpZHRoc1tjb2x1bW5JbmRleF0g
PSBzdGQ6Om1heChtYXhpbXVtRml4ZWRDb2x1bW5XaWR0aHNbY29sdW1uSW5kZXhdLnZhbHVlX29y
KDBfbHUpLCBmaXhlZFdpZHRoKTsKKyAgICAgICAgICAgICAgICBoYXNDb2x1bW5XaXRoRml4ZWRX
aWR0aCA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBjYXNlIExlbmd0aFR5cGU6OlBlcmNlbnQ6IHsKKyAgICAgICAgICAgICAgICBtYXhp
bXVtUGVyY2VudENvbHVtbldpZHRoc1tjb2x1bW5JbmRleF0gPSBzdGQ6Om1heChtYXhpbXVtUGVy
Y2VudENvbHVtbldpZHRoc1tjb2x1bW5JbmRleF0udmFsdWVfb3IoMC5mKSwgY2VsbExvZ2ljYWxX
aWR0aC5wZXJjZW50KCkpOworICAgICAgICAgICAgICAgIGhhc0NvbHVtbldpdGhQZXJjZW50V2lk
dGggPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgY2FzZSBMZW5ndGhUeXBlOjpSZWxhdGl2ZToKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX0lNUExFTUVOVEVEX1lFVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgIH0KKyAgICB9OworICAgIGNvbGxlY3RDZWxsc0ludHJpbnNpY1dpZHRoQ29uc3Ry
YWludHMoKTsKIAogICAgIFZlY3RvcjxJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzPiBjb2x1bW5J
bnRyaW5zaWNXaWR0aHMoY29sdW1uTGlzdC5zaXplKCkpOwotICAgIC8vIDMuIENvbGxlY3QgaGUg
bWluL21heCB3aWR0aCBmb3IgZWFjaCBjb2x1bW4gYnV0IGlnbm9yZSBjb2x1bW4gc3BhbnMgZm9y
IG5vdy4KICAgICBWZWN0b3I8U2xvdFBvc2l0aW9uPiBzcGFubmluZ0NlbGxQb3NpdGlvbkxpc3Q7
CiAgICAgc2l6ZV90IG51bWJlck9mQWN0dWFsQ29sdW1ucyA9IDA7Ci0gICAgZm9yIChzaXplX3Qg
Y29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbkxpc3Quc2l6ZSgpOyArK2NvbHVt
bkluZGV4KSB7Ci0gICAgICAgIGF1dG8gY29sdW1uSGFzTm9uU3Bhbm5lZENlbGwgPSBmYWxzZTsK
LSAgICAgICAgZm9yIChzaXplX3Qgcm93SW5kZXggPSAwOyByb3dJbmRleCA8IGdyaWQucm93cygp
LnNpemUoKTsgKytyb3dJbmRleCkgewotICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpncmlkLnNs
b3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7Ci0gICAgICAgICAgICBpZiAoc2xvdC5pc0Nv
bHVtblNwYW5uZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGNv
bHVtbkhhc05vblNwYW5uZWRDZWxsID0gdHJ1ZTsKLSAgICAgICAgICAgIGlmIChzbG90Lmhhc0Nv
bHVtblNwYW4oKSkgewotICAgICAgICAgICAgICAgIHNwYW5uaW5nQ2VsbFBvc2l0aW9uTGlzdC5h
cHBlbmQoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7Ci0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIHdpZHRoQ29uc3RyYWludHMgPSBz
bG90LndpZHRoQ29uc3RyYWludHMoKTsKLSAgICAgICAgICAgIGlmIChhdXRvIGZpeGVkQ29sdW1u
V2lkdGggPSBtYXhpbXVtRml4ZWRDb2x1bW5XaWR0aHNbY29sdW1uSW5kZXhdKQotICAgICAgICAg
ICAgICAgIHdpZHRoQ29uc3RyYWludHMubWF4aW11bSA9IHN0ZDo6bWF4KCpmaXhlZENvbHVtbldp
ZHRoLCB3aWR0aENvbnN0cmFpbnRzLm1pbmltdW0pOworICAgIGF1dG8gY29tcHV0ZUNvbHVtbnNJ
bnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzID0gWyZdIHsKKyAgICAgICAgLy8gMy4gQ29sbGVjdCBo
ZSBtaW4vbWF4IHdpZHRoIGZvciBlYWNoIGNvbHVtbiBidXQgaWdub3JlIGNvbHVtbiBzcGFucyBm
b3Igbm93LgorICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4
IDwgY29sdW1uTGlzdC5zaXplKCk7ICsrY29sdW1uSW5kZXgpIHsKKyAgICAgICAgICAgIGF1dG8g
Y29sdW1uSGFzTm9uU3Bhbm5lZENlbGwgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IHJvd0luZGV4ID0gMDsgcm93SW5kZXggPCBncmlkLnJvd3MoKS5zaXplKCk7ICsrcm93SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG90ID0gKmdyaWQuc2xvdCh7IGNvbHVtbkluZGV4
LCByb3dJbmRleCB9KTsKKyAgICAgICAgICAgICAgICBpZiAoc2xvdC5pc0NvbHVtblNwYW5uZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY29sdW1u
SGFzTm9uU3Bhbm5lZENlbGwgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmIChzbG90Lmhhc0Nv
bHVtblNwYW4oKSkgeworICAgICAgICAgICAgICAgICAgICBzcGFubmluZ0NlbGxQb3NpdGlvbkxp
c3QuYXBwZW5kKHsgY29sdW1uSW5kZXgsIHJvd0luZGV4IH0pOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXV0byB3aWR0
aENvbnN0cmFpbnRzID0gc2xvdC53aWR0aENvbnN0cmFpbnRzKCk7CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8gZml4ZWRDb2x1bW5XaWR0aCA9IG1heGltdW1GaXhlZENvbHVtbldpZHRoc1tjb2x1
bW5JbmRleF0pCisgICAgICAgICAgICAgICAgICAgIHdpZHRoQ29uc3RyYWludHMubWF4aW11bSA9
IHN0ZDo6bWF4KCpmaXhlZENvbHVtbldpZHRoLCB3aWR0aENvbnN0cmFpbnRzLm1pbmltdW0pOwog
Ci0gICAgICAgICAgICBjb2x1bW5JbnRyaW5zaWNXaWR0aHNbY29sdW1uSW5kZXhdLm1pbmltdW0g
PSBzdGQ6Om1heCh3aWR0aENvbnN0cmFpbnRzLm1pbmltdW0sIGNvbHVtbkludHJpbnNpY1dpZHRo
c1tjb2x1bW5JbmRleF0ubWluaW11bSk7Ci0gICAgICAgICAgICBjb2x1bW5JbnRyaW5zaWNXaWR0
aHNbY29sdW1uSW5kZXhdLm1heGltdW0gPSBzdGQ6Om1heCh3aWR0aENvbnN0cmFpbnRzLm1heGlt
dW0sIGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5JbmRleF0ubWF4aW11bSk7CisgICAgICAg
ICAgICAgICAgY29sdW1uSW50cmluc2ljV2lkdGhzW2NvbHVtbkluZGV4XS5taW5pbXVtID0gc3Rk
OjptYXgod2lkdGhDb25zdHJhaW50cy5taW5pbXVtLCBjb2x1bW5JbnRyaW5zaWNXaWR0aHNbY29s
dW1uSW5kZXhdLm1pbmltdW0pOworICAgICAgICAgICAgICAgIGNvbHVtbkludHJpbnNpY1dpZHRo
c1tjb2x1bW5JbmRleF0ubWF4aW11bSA9IHN0ZDo6bWF4KHdpZHRoQ29uc3RyYWludHMubWF4aW11
bSwgY29sdW1uSW50cmluc2ljV2lkdGhzW2NvbHVtbkluZGV4XS5tYXhpbXVtKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIChjb2x1bW5IYXNOb25TcGFubmVkQ2VsbCkKKyAgICAgICAg
ICAgICAgICArK251bWJlck9mQWN0dWFsQ29sdW1uczsKICAgICAgICAgfQotICAgICAgICBpZiAo
Y29sdW1uSGFzTm9uU3Bhbm5lZENlbGwpCi0gICAgICAgICAgICArK251bWJlck9mQWN0dWFsQ29s
dW1uczsKLSAgICB9CisgICAgfTsKKyAgICBjb21wdXRlQ29sdW1uc0ludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMoKTsKIAotICAgIC8vIDQuIERpc3RyaWJ1dGUgdGhlIHNwYW5uaW5nIG1pbi9tYXgg
d2lkdGhzLgotICAgIGZvciAoYXV0byBzcGFubmluZ0NlbGxQb3NpdGlvbiA6IHNwYW5uaW5nQ2Vs
bFBvc2l0aW9uTGlzdCkgewotICAgICAgICBhdXRvJiBzbG90ID0gKmdyaWQuc2xvdChzcGFubmlu
Z0NlbGxQb3NpdGlvbik7Ci0gICAgICAgIGF1dG8mIGNlbGwgPSBzbG90LmNlbGwoKTsKLSAgICAg
ICAgQVNTRVJUKHNsb3QuaGFzQ29sdW1uU3BhbigpKTsKLSAgICAgICAgYXV0byB3aWR0aENvbnN0
cmFpbnRzVG9EaXN0cmlidXRlID0gc2xvdC53aWR0aENvbnN0cmFpbnRzKCk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGNvbHVtblNwYW5JbmRleCA9IGNlbGwuc3RhcnRDb2x1bW4oKTsgY29sdW1uU3Bh
bkluZGV4IDwgY2VsbC5lbmRDb2x1bW4oKTsgKytjb2x1bW5TcGFuSW5kZXgpCi0gICAgICAgICAg
ICB3aWR0aENvbnN0cmFpbnRzVG9EaXN0cmlidXRlIC09IGNvbHVtbkludHJpbnNpY1dpZHRoc1tj
b2x1bW5TcGFuSW5kZXhdOwotICAgICAgICAvLyA8dGFibGUgc3R5bGU9ImJvcmRlci1zcGFjaW5n
OiA1MHB4Ij48dHI+PHRkIGNvbHNwYW49Mj5sb25nIGxvbmcgdGV4dDwvdGQ+PC90cj48dHI+PHRk
PmxvPC90ZD48dGQ+eHQ8L3RkPjx0cj48L3RhYmxlPgotICAgICAgICAvLyBbbG9uZyBsb25nIHRl
eHRdCi0gICAgICAgIC8vIFtsb10gICAgICAgIFt4dF0KLSAgICAgICAgLy8gV2hpbGUgaXQgbG9v
a3MgbGlrZSB0aGUgc3Bhbm5pbmcgY2VsbCBoYXMgdG8gZGlzdHJpYnV0ZSBhbGwgaXRzIHNwYW5u
aW5nIHdpZHRoLCB0aGUgYm9yZGVyLXNwYWNpbmcgdGFrZXMgbW9zdCBvZiB0aGUgc3BhY2UgYW5k
Ci0gICAgICAgIC8vIG5vIGRpc3RyaWJ1dGlvbiBpcyBuZWVkZWQgYXQgYWxsLgotICAgICAgICB3
aWR0aENvbnN0cmFpbnRzVG9EaXN0cmlidXRlIC09IChjZWxsLmNvbHVtblNwYW4oKSAtIDEpICog
Z3JpZC5ob3Jpem9udGFsU3BhY2luZygpOwotICAgICAgICAvLyBGSVhNRTogQ2hlY2sgaWYgZml4
ZWQgd2lkdGggY29sdW1ucyBzaG91bGQgYmUgc2tpcHBlZCBoZXJlLgotICAgICAgICB3aWR0aENv
bnN0cmFpbnRzVG9EaXN0cmlidXRlLm1pbmltdW0gPSBzdGQ6Om1heChMYXlvdXRVbml0IHsgfSwg
d2lkdGhDb25zdHJhaW50c1RvRGlzdHJpYnV0ZS5taW5pbXVtIC8gY2VsbC5jb2x1bW5TcGFuKCkp
OwotICAgICAgICB3aWR0aENvbnN0cmFpbnRzVG9EaXN0cmlidXRlLm1heGltdW0gPSBzdGQ6Om1h
eChMYXlvdXRVbml0IHsgfSwgd2lkdGhDb25zdHJhaW50c1RvRGlzdHJpYnV0ZS5tYXhpbXVtIC8g
Y2VsbC5jb2x1bW5TcGFuKCkpOwotICAgICAgICBpZiAod2lkdGhDb25zdHJhaW50c1RvRGlzdHJp
YnV0ZS5taW5pbXVtIHx8IHdpZHRoQ29uc3RyYWludHNUb0Rpc3RyaWJ1dGUubWF4aW11bSkgewor
ICAgIGF1dG8gcmVzb2x2ZVNwYW5uaW5nQ2VsbHMgPSBbJl0geworICAgICAgICAvLyA0LiBEaXN0
cmlidXRlIHRoZSBzcGFubmluZyBtaW4vbWF4IHdpZHRocy4KKyAgICAgICAgZm9yIChhdXRvIHNw
YW5uaW5nQ2VsbFBvc2l0aW9uIDogc3Bhbm5pbmdDZWxsUG9zaXRpb25MaXN0KSB7CisgICAgICAg
ICAgICBhdXRvJiBzbG90ID0gKmdyaWQuc2xvdChzcGFubmluZ0NlbGxQb3NpdGlvbik7CisgICAg
ICAgICAgICBhdXRvJiBjZWxsID0gc2xvdC5jZWxsKCk7CisgICAgICAgICAgICBBU1NFUlQoc2xv
dC5oYXNDb2x1bW5TcGFuKCkpOworICAgICAgICAgICAgYXV0byB3aWR0aENvbnN0cmFpbnRzVG9E
aXN0cmlidXRlID0gc2xvdC53aWR0aENvbnN0cmFpbnRzKCk7CiAgICAgICAgICAgICBmb3IgKHNp
emVfdCBjb2x1bW5TcGFuSW5kZXggPSBjZWxsLnN0YXJ0Q29sdW1uKCk7IGNvbHVtblNwYW5JbmRl
eCA8IGNlbGwuZW5kQ29sdW1uKCk7ICsrY29sdW1uU3BhbkluZGV4KQotICAgICAgICAgICAgICAg
IGNvbHVtbkludHJpbnNpY1dpZHRoc1tjb2x1bW5TcGFuSW5kZXhdICs9IHdpZHRoQ29uc3RyYWlu
dHNUb0Rpc3RyaWJ1dGU7CisgICAgICAgICAgICAgICAgd2lkdGhDb25zdHJhaW50c1RvRGlzdHJp
YnV0ZSAtPSBjb2x1bW5JbnRyaW5zaWNXaWR0aHNbY29sdW1uU3BhbkluZGV4XTsKKyAgICAgICAg
ICAgIC8vIDx0YWJsZSBzdHlsZT0iYm9yZGVyLXNwYWNpbmc6IDUwcHgiPjx0cj48dGQgY29sc3Bh
bj0yPmxvbmcgbG9uZyB0ZXh0PC90ZD48L3RyPjx0cj48dGQ+bG88L3RkPjx0ZD54dDwvdGQ+PHRy
PjwvdGFibGU+CisgICAgICAgICAgICAvLyBbbG9uZyBsb25nIHRleHRdCisgICAgICAgICAgICAv
LyBbbG9dICAgICAgICBbeHRdCisgICAgICAgICAgICAvLyBXaGlsZSBpdCBsb29rcyBsaWtlIHRo
ZSBzcGFubmluZyBjZWxsIGhhcyB0byBkaXN0cmlidXRlIGFsbCBpdHMgc3Bhbm5pbmcgd2lkdGgs
IHRoZSBib3JkZXItc3BhY2luZyB0YWtlcyBtb3N0IG9mIHRoZSBzcGFjZSBhbmQKKyAgICAgICAg
ICAgIC8vIG5vIGRpc3RyaWJ1dGlvbiBpcyBuZWVkZWQgYXQgYWxsLgorICAgICAgICAgICAgd2lk
dGhDb25zdHJhaW50c1RvRGlzdHJpYnV0ZSAtPSAoY2VsbC5jb2x1bW5TcGFuKCkgLSAxKSAqIGdy
aWQuaG9yaXpvbnRhbFNwYWNpbmcoKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBpZiBm
aXhlZCB3aWR0aCBjb2x1bW5zIHNob3VsZCBiZSBza2lwcGVkIGhlcmUuCisgICAgICAgICAgICB3
aWR0aENvbnN0cmFpbnRzVG9EaXN0cmlidXRlLm1pbmltdW0gPSBzdGQ6Om1heChMYXlvdXRVbml0
IHsgfSwgd2lkdGhDb25zdHJhaW50c1RvRGlzdHJpYnV0ZS5taW5pbXVtIC8gY2VsbC5jb2x1bW5T
cGFuKCkpOworICAgICAgICAgICAgd2lkdGhDb25zdHJhaW50c1RvRGlzdHJpYnV0ZS5tYXhpbXVt
ID0gc3RkOjptYXgoTGF5b3V0VW5pdCB7IH0sIHdpZHRoQ29uc3RyYWludHNUb0Rpc3RyaWJ1dGUu
bWF4aW11bSAvIGNlbGwuY29sdW1uU3BhbigpKTsKKyAgICAgICAgICAgIGlmICh3aWR0aENvbnN0
cmFpbnRzVG9EaXN0cmlidXRlLm1pbmltdW0gfHwgd2lkdGhDb25zdHJhaW50c1RvRGlzdHJpYnV0
ZS5tYXhpbXVtKSB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY29sdW1uU3BhbkluZGV4
ID0gY2VsbC5zdGFydENvbHVtbigpOyBjb2x1bW5TcGFuSW5kZXggPCBjZWxsLmVuZENvbHVtbigp
OyArK2NvbHVtblNwYW5JbmRleCkKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uSW50cmluc2lj
V2lkdGhzW2NvbHVtblNwYW5JbmRleF0gKz0gd2lkdGhDb25zdHJhaW50c1RvRGlzdHJpYnV0ZTsK
KyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0KKyAgICB9OworICAgIHJlc29sdmVTcGFu
bmluZ0NlbGxzKCk7CiAKICAgICAvLyA1LiBUaGUgdGFibGUgbWluL21heCB3aWR0aHMgaXMganVz
dCB0aGUgYWNjdW11bGF0ZWQgY29sdW1uIGNvbnN0cmFpbnRzIHdpdGggdGhlIHBlcmNlbnQgYWRq
dXN0bWVudC4KICAgICBhdXRvIHRhYmxlV2lkdGhDb25zdHJhaW50cyA9IEludHJpbnNpY1dpZHRo
Q29uc3RyYWludHMgeyB9OwogICAgIGZvciAoYXV0byYgY29sdW1uSW50cmluc2ljV2lkdGggOiBj
b2x1bW5JbnRyaW5zaWNXaWR0aHMpCiAgICAgICAgIHRhYmxlV2lkdGhDb25zdHJhaW50cyArPSBj
b2x1bW5JbnRyaW5zaWNXaWR0aDsKIAotICAgIC8vIDYuIEFkanVzdCB0aGUgdGFibGUgbWF4IHdp
ZHRoIHdpdGggdGhlIHBlcmNlbnQgY29sdW1uIHZhbHVlcyBpZiBhcHBsaWNhYmxlLgotICAgIGlm
IChoYXNDb2x1bW5XaXRoRml4ZWRXaWR0aCAmJiAhaGFzQ29sdW1uV2l0aFBlcmNlbnRXaWR0aCkg
ewotICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29s
dW1uTGlzdC5zaXplKCk7ICsrY29sdW1uSW5kZXgpIHsKLSAgICAgICAgICAgIGlmIChhdXRvIGZp
eGVkV2lkdGggPSBtYXhpbXVtRml4ZWRDb2x1bW5XaWR0aHNbY29sdW1uSW5kZXhdKQotICAgICAg
ICAgICAgICAgIGNvbHVtbkxpc3RbY29sdW1uSW5kZXhdLnNldENvbXB1dGVkTG9naWNhbFdpZHRo
KHsgKmZpeGVkV2lkdGgsIExlbmd0aFR5cGU6OkZpeGVkIH0pOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIGlmIChoYXNDb2x1bW5XaXRoUGVyY2VudFdpZHRoKSB7CisgICAgYXV0byBhZGp1c3RDb2x1
bW5zV2l0aFBlcmNlbnRBbmRGaXhlZFdpZHRoVmFsdWVzID0gWyZdIHsKKyAgICAgICAgLy8gNi4g
QWRqdXN0IHRoZSB0YWJsZSBtYXggd2lkdGggd2l0aCB0aGUgcGVyY2VudCBjb2x1bW4gdmFsdWVz
IGlmIGFwcGxpY2FibGUuCisgICAgICAgIGlmICghaGFzQ29sdW1uV2l0aEZpeGVkV2lkdGggJiYg
IWhhc0NvbHVtbldpdGhQZXJjZW50V2lkdGgpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKGhhc0NvbHVtbldpdGhGaXhlZFdpZHRoICYmICFoYXNDb2x1bW5XaXRoUGVyY2VudFdp
ZHRoKSB7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbklu
ZGV4IDwgY29sdW1uTGlzdC5zaXplKCk7ICsrY29sdW1uSW5kZXgpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYXV0byBmaXhlZFdpZHRoID0gbWF4aW11bUZpeGVkQ29sdW1uV2lkdGhzW2NvbHVtbklu
ZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uTGlzdFtjb2x1bW5JbmRleF0uc2V0Q29t
cHV0ZWRMb2dpY2FsV2lkdGgoeyAqZml4ZWRXaWR0aCwgTGVuZ3RoVHlwZTo6Rml4ZWQgfSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gCisKICAgICAgICAg
YXV0byByZW1haW5pbmdQZXJjZW50ID0gMTAwLjBmOwogICAgICAgICBhdXRvIHBlcmNlbnRNYXhp
bXVtV2lkdGggPSBMYXlvdXRVbml0IHsgfTsKICAgICAgICAgYXV0byBub25QZXJjZW50Q29sdW1u
c1dpZHRoID0gTGF5b3V0VW5pdCB7IH07CkBAIC00ODAsOSArNDk5LDEwIEBAIEludHJpbnNpY1dp
ZHRoQ29uc3RyYWludHMgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRQcmVmZXJyZWRX
aWR0aEZvckNvbHVtCiAgICAgICAgICAgICAvLyBJdCBtYXkgdmVyeSB3ZWxsIGJlIGFuIGFuY2ll
bnQgYnVnIHdlIG5lZWQgdG8gc3VwcG9ydCAoaXQgbWFwcyB0byB0aGUgZXBzaWxvbiB2YWx1ZSBp
biBBdXRvVGFibGVMYXlvdXQ6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzIHdoaWNoIGlz
IHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8pLgogICAgICAgICAgICAgYWRqdXN0ZWRNYXhpbXVt
V2lkdGggPSBMYXlvdXRVbml0OjptYXgoKTsKICAgICAgICAgfQotCiAgICAgICAgIHRhYmxlV2lk
dGhDb25zdHJhaW50cy5tYXhpbXVtID0gc3RkOjptYXgodGFibGVXaWR0aENvbnN0cmFpbnRzLm1h
eGltdW0sIGFkanVzdGVkTWF4aW11bVdpZHRoKTsKLSAgICB9CisgICAgfTsKKyAgICBhZGp1c3RD
b2x1bW5zV2l0aFBlcmNlbnRBbmRGaXhlZFdpZHRoVmFsdWVzKCk7CisKICAgICAvLyBFeHBhbmQg
dGhlIHByZWZlcnJlZCB3aWR0aCB3aXRoIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNlbGwgc3BhY2lu
ZyAobm90ZSB0aGF0IGNvbHVtbiBzcGFubmVycyBjb3VudCBhcyBvbmUgY2VsbCkuCiAgICAgdGFi
bGVXaWR0aENvbnN0cmFpbnRzICs9IChudW1iZXJPZkFjdHVhbENvbHVtbnMgKyAxKSAqIGdyaWQu
aG9yaXpvbnRhbFNwYWNpbmcoKTsKICAgICByZXR1cm4gdGFibGVXaWR0aENvbnN0cmFpbnRzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Zvcm1hdHRpbmdDb250ZXh0cy90YWJs
ZS9UYWJsZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRl
eHRzL3RhYmxlL1RhYmxlTGF5b3V0LmNwcAppbmRleCBlZjhiZWE2MDNkNjJkYjVlNWZjYzRhNWEy
MjcyNWNhYmZlOGNlZWM3Li4zM2JhNTcxMzY2OWVlNDgyOTM0MjVmNDNlNmYxZjg4NDEwNDJlZTAy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGluZ0NvbnRleHRzL3Rh
YmxlL1RhYmxlTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZm9ybWF0dGlu
Z0NvbnRleHRzL3RhYmxlL1RhYmxlTGF5b3V0LmNwcApAQCAtMTE5LDIwNiArMTE5LDIxOSBAQCBz
dGF0aWMgVmVjdG9yPExheW91dFVuaXQ+IGRpc3RyaWJ1dGVBdmFpbGFibGVTcGFjZShjb25zdCBU
YWJsZUdyaWQmIGdyaWQsIExheW91dAogewogICAgIGF1dG8mIGNvbHVtbnMgPSBncmlkLmNvbHVt
bnMoKTsKICAgICBhdXRvJiByb3dzID0gZ3JpZC5yb3dzKCk7Ci0gICAgLy8gMS4gQ29sbGVjdCB0
aGUgbm9uLXNwYW5uaW5nIHNwYWNlcyBmaXJzdC4gVGhleSBhcmUgdXNlZCBmb3IgdGhlIGZpbmFs
IGRpc3RyaWJ1dGlvbiBhcyB3ZWxsIGFzIGZvciBkaXN0cmlidXRpbmcgdGhlIHNwYW5uaW5nIHNw
YWNlLgogICAgIFZlY3RvcjxzdGQ6Om9wdGlvbmFsPEdyaWRTcGFjZT4+IHJlc29sdmVkSXRlbXMo
U3BhblR5cGU6OnNpemUoZ3JpZCkpOwotICAgIGZvciAoc2l6ZV90IGNvbHVtbkluZGV4ID0gMDsg
Y29sdW1uSW5kZXggPCBjb2x1bW5zLnNpemUoKTsgKytjb2x1bW5JbmRleCkgewotICAgICAgICBm
b3IgKHNpemVfdCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwgcm93cy5zaXplKCk7ICsrcm93SW5k
ZXgpIHsKLSAgICAgICAgICAgIGF1dG8mIHNsb3QgPSAqZ3JpZC5zbG90KHsgY29sdW1uSW5kZXgs
IHJvd0luZGV4IH0pOwotICAgICAgICAgICAgaWYgKFNwYW5UeXBlOjpoYXNTcGFuKHNsb3QpIHx8
IFNwYW5UeXBlOjppc1NwYW5uZWQoc2xvdCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBhdXRvIGluZGV4ID0gU3BhblR5cGU6OmluZGV4KGNvbHVtbkluZGV4LCByb3dJ
bmRleCk7Ci0gICAgICAgICAgICBhdXRvIGN1cnJlbnRTcGFjZSA9IHNsb3RTcGFjZShzbG90LCBp
bmRleCk7Ci0gICAgICAgICAgICBpZiAoIXJlc29sdmVkSXRlbXNbaW5kZXhdKSB7Ci0gICAgICAg
ICAgICAgICAgcmVzb2x2ZWRJdGVtc1tpbmRleF0gPSBjdXJyZW50U3BhY2U7Ci0gICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvJiByZXNvbHZl
ZEl0ZW0gPSByZXNvbHZlZEl0ZW1zW2luZGV4XTsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgbWl4ZWQgY29sdW1uL3JvdyB0eXBlcyBlLmcuIGZpcnN0IHJvdyBmaXJzdCBj
b2x1bW4gaXMgZml4ZWQsIHdoaWxlIHNlY29uZCByb3cgZmlyc3QgY29sdW1uIGlzIHBlcmNlbnQu
Ci0gICAgICAgICAgICBBU1NFUlQocmVzb2x2ZWRJdGVtLT50eXBlID09IGN1cnJlbnRTcGFjZS50
eXBlKTsKLSAgICAgICAgICAgIHJlc29sdmVkSXRlbS0+cHJlZmVycmVkU2l6ZSA9IHN0ZDo6bWF4
KHJlc29sdmVkSXRlbS0+cHJlZmVycmVkU2l6ZSwgY3VycmVudFNwYWNlLnByZWZlcnJlZFNpemUp
OwotICAgICAgICAgICAgcmVzb2x2ZWRJdGVtLT5mbGV4QmFzZSA9IHN0ZDo6bWF4KHJlc29sdmVk
SXRlbS0+ZmxleEJhc2UsIGN1cnJlbnRTcGFjZS5mbGV4QmFzZSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyAyLiBDb2xsZWN0IHRoZSBzcGFubmluZyBjZWxscy4KLSAgICBzdHJ1Y3QgU3Bh
bm5pbmdDZWxsIHsKLSAgICAgICAgU2xvdFBvc2l0aW9uIHBvc2l0aW9uOwotICAgICAgICBHcmlk
U3BhY2UgdW5yZXNvbHZlZFNwYWNlOwotICAgIH07Ci0gICAgVmVjdG9yPFNwYW5uaW5nQ2VsbD4g
c3Bhbm5pbmdDZWxsczsKLSAgICBmb3IgKHNpemVfdCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwg
cm93cy5zaXplKCk7ICsrcm93SW5kZXgpIHsKKyAgICBhdXRvIGNvbGxlY3ROb25TcGFubmluZ0Nl
bGxzID0gWyZdIHsKKyAgICAgICAgLy8gMS4gQ29sbGVjdCB0aGUgbm9uLXNwYW5uaW5nIHNwYWNl
cyBmaXJzdC4gVGhleSBhcmUgdXNlZCBmb3IgdGhlIGZpbmFsIGRpc3RyaWJ1dGlvbiBhcyB3ZWxs
IGFzIGZvciBkaXN0cmlidXRpbmcgdGhlIHNwYW5uaW5nIHNwYWNlLgogICAgICAgICBmb3IgKHNp
emVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgY29sdW1ucy5zaXplKCk7ICsrY29s
dW1uSW5kZXgpIHsKLSAgICAgICAgICAgIGF1dG8mIHNsb3QgPSAqZ3JpZC5zbG90KHsgY29sdW1u
SW5kZXgsIHJvd0luZGV4IH0pOwotICAgICAgICAgICAgaWYgKFNwYW5UeXBlOjpoYXNTcGFuKHNs
b3QpKQotICAgICAgICAgICAgICAgIHNwYW5uaW5nQ2VsbHMuYXBwZW5kKHsgeyBjb2x1bW5JbmRl
eCwgcm93SW5kZXggfSwgc2xvdFNwYWNlKHNsb3QsIFNwYW5UeXBlOjppbmRleChjb2x1bW5JbmRl
eCwgcm93SW5kZXgpKSB9KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvLyBXZSBuZWVkIHRoZXNl
IHNwYW5uaW5nIGNlbGxzIGluIHRoZSBvcmRlciBvZiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMvcm93
cyB0aGV5IHNwYW4gc28gdGhhdAotICAgIC8vIHdlIGNhbiByZXNvbHZlIG92ZXJsYXBwaW5nIHNw
YW5zIHN0YXJ0aW5nIHdpdGggdGhlIHNob3J0ZXIgb25lcyBlLmcuCi0gICAgLy8gPHRkIGNvbHNw
YW49ND4jYTwvdGQ+PHRkPiNiPC90ZD4KLSAgICAvLyA8dGQgY29sc3Bhbj0yPiNjPC90ZD48dGQg
Y29sc3Bhbj0zPiNkPC90ZD4KLSAgICBzdGQ6OnNvcnQoc3Bhbm5pbmdDZWxscy5iZWdpbigpLCBz
cGFubmluZ0NlbGxzLmVuZCgpLCBbJl0gKGF1dG8mIGEsIGF1dG8mIGIpIHsKLSAgICAgICAgcmV0
dXJuIFNwYW5UeXBlOjpzcGFuQ291bnQoZ3JpZC5zbG90KGEucG9zaXRpb24pLT5jZWxsKCkpIDwg
U3BhblR5cGU6OnNwYW5Db3VudChncmlkLnNsb3QoYi5wb3NpdGlvbiktPmNlbGwoKSk7Ci0gICAg
fSk7Ci0KLSAgICAvLyAzLiBEaXN0cmlidXRlIHRoZSBzcGFubmluZyBjZWxscycgbWltaW11bSBz
cGFjZSBhY3Jvc3MgdGhlIGNvbHVtbnMvcm93cyB1c2luZyB0aGUgbm9uLXNwYW5uaW5nIHNwYWNl
cy4KLSAgICAvLyBlLmcuIFsgMSBdWyA1IF1bIDEgXQotICAgIC8vICAgICAgWyAgICA5ICAgXVsg
MSBdCi0gICAgLy8gVGhlIGluaXRpYWwgd2lkdGhzIGFyZTogWyAyIF1bIDcgXVsgMSBdCi0gICAg
Zm9yIChhdXRvIHNwYW5uaW5nQ2VsbCA6IHNwYW5uaW5nQ2VsbHMpIHsKLSAgICAgICAgYXV0byYg
Y2VsbCA9IGdyaWQuc2xvdChzcGFubmluZ0NlbGwucG9zaXRpb24pLT5jZWxsKCk7Ci0gICAgICAg
IGF1dG8gdW5yZXNvbHZlZFNwYW5uaW5nU3BhY2UgPSBzcGFubmluZ0NlbGwudW5yZXNvbHZlZFNw
YWNlOwotICAgICAgICBpZiAoIXJlc29sdmVkSXRlbXNbU3BhblR5cGU6OnN0YXJ0U3BhbihjZWxs
KV0gfHwgIXJlc29sdmVkSXRlbXNbU3BhblR5cGU6OmVuZFNwYW4oY2VsbCkgLSAxXSkgewotICAg
ICAgICAgICAgLy8gPHRkIGNvbHNwYW49ND4jYTwvdGQ+PHRkPiNiPC90ZD4KLSAgICAgICAgICAg
IC8vIDx0ZCBjb2xzcGFuPTI+I2M8L3RkPjx0ZCBjb2xzcGFuPTM+I2Q8L3RkPgotICAgICAgICAg
ICAgLy8gVW5yZXNvbHZlZCBjb2x1bW5zIGFyZTogMSAyIDMgNAotICAgICAgICAgICAgLy8gMS4g
VGFrZSBjb2xzcGFuPTIgKHNob3J0ZXN0IHNwYW4pIGFuZCByZXNvbHZlIGNvbHVtbiAxIGFuZCAy
Ci0gICAgICAgICAgICAvLyAyLiBUYWtlIGNvbHNwYW49MyBhbmQgcmVzb2x2ZSBjb2x1bW4gMyBh
bmQgNCAoNSBpcyByZXNvbHZlZCBiZWNhdXNlIGl0IGFscmVhZHkgaGFzIGEgbm9uLXNwYW5uaW5n
IGNlbGwpLgotICAgICAgICAgICAgLy8gMy4gY29sc3Bhbj00IG5lZWRzIG5vIHJlc29sdmluZyBi
ZWNhdXNlIGFsbCB0aGUgc3Bhbm5lZCBjb2x1bW5zICgxIDIgMyA0KSBoYXZlIGFscmVhZHkgYmVl
biByZXNvbHZlZC4KLSAgICAgICAgICAgIGF1dG8gdW5yZXNvbHZlZENvbHVtbkNvdW50ID0gY2Vs
bC5jb2x1bW5TcGFuKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gc3BhbkluZGV4ID0gU3BhblR5
cGU6OnN0YXJ0U3BhbihjZWxsKTsgc3BhbkluZGV4IDwgU3BhblR5cGU6OmVuZFNwYW4oY2VsbCk7
ICsrc3BhbkluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZEl0ZW1zW3NwYW5J
bmRleF0pCisgICAgICAgICAgICBmb3IgKHNpemVfdCByb3dJbmRleCA9IDA7IHJvd0luZGV4IDwg
cm93cy5zaXplKCk7ICsrcm93SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBzbG90ID0g
KmdyaWQuc2xvdCh7IGNvbHVtbkluZGV4LCByb3dJbmRleCB9KTsKKyAgICAgICAgICAgICAgICBp
ZiAoU3BhblR5cGU6Omhhc1NwYW4oc2xvdCkgfHwgU3BhblR5cGU6OmlzU3Bhbm5lZChzbG90KSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHVu
cmVzb2x2ZWRDb2x1bW5Db3VudCk7Ci0gICAgICAgICAgICAgICAgLS11bnJlc29sdmVkQ29sdW1u
Q291bnQ7Ci0gICAgICAgICAgICAgICAgdW5yZXNvbHZlZFNwYW5uaW5nU3BhY2UgLT0gKnJlc29s
dmVkSXRlbXNbc3BhbkluZGV4XTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVCh1
bnJlc29sdmVkQ29sdW1uQ291bnQpOwotICAgICAgICAgICAgYXV0byBlcXVhbFNwYWNlRm9yU3Bh
bm5lZENvbHVtbnMgPSB1bnJlc29sdmVkU3Bhbm5pbmdTcGFjZSAvIHVucmVzb2x2ZWRDb2x1bW5D
b3VudDsKLSAgICAgICAgICAgIGZvciAoYXV0byBzcGFuSW5kZXggPSBTcGFuVHlwZTo6c3RhcnRT
cGFuKGNlbGwpOyBzcGFuSW5kZXggPCBTcGFuVHlwZTo6ZW5kU3BhbihjZWxsKTsgKytzcGFuSW5k
ZXgpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRJdGVtc1tzcGFuSW5kZXhdKQorICAg
ICAgICAgICAgICAgIGF1dG8gaW5kZXggPSBTcGFuVHlwZTo6aW5kZXgoY29sdW1uSW5kZXgsIHJv
d0luZGV4KTsKKyAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRTcGFjZSA9IHNsb3RTcGFjZShz
bG90LCBpbmRleCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZEl0ZW1zW2luZGV4XSkg
eworICAgICAgICAgICAgICAgICAgICByZXNvbHZlZEl0ZW1zW2luZGV4XSA9IGN1cnJlbnRTcGFj
ZTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgcmVzb2x2
ZWRJdGVtc1tzcGFuSW5kZXhdID0gZXF1YWxTcGFjZUZvclNwYW5uZWRDb2x1bW5zOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdXRvJiByZXNvbHZlZEl0ZW0gPSByZXNvbHZl
ZEl0ZW1zW2luZGV4XTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IG1peGVkIGNvbHVtbi9yb3cgdHlwZXMgZS5nLiBmaXJzdCByb3cgZmlyc3QgY29sdW1uIGlzIGZp
eGVkLCB3aGlsZSBzZWNvbmQgcm93IGZpcnN0IGNvbHVtbiBpcyBwZXJjZW50LgorICAgICAgICAg
ICAgICAgIEFTU0VSVChyZXNvbHZlZEl0ZW0tPnR5cGUgPT0gY3VycmVudFNwYWNlLnR5cGUpOwor
ICAgICAgICAgICAgICAgIHJlc29sdmVkSXRlbS0+cHJlZmVycmVkU2l6ZSA9IHN0ZDo6bWF4KHJl
c29sdmVkSXRlbS0+cHJlZmVycmVkU2l6ZSwgY3VycmVudFNwYWNlLnByZWZlcnJlZFNpemUpOwor
ICAgICAgICAgICAgICAgIHJlc29sdmVkSXRlbS0+ZmxleEJhc2UgPSBzdGQ6Om1heChyZXNvbHZl
ZEl0ZW0tPmZsZXhCYXNlLCBjdXJyZW50U3BhY2UuZmxleEJhc2UpOwogICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gMS4gQ29sbGVjdCB0aGUgbm9uLXNwYW5p
bmcgcmVzb2x2ZWQgc3BhY2VzLgotICAgICAgICAgICAgLy8gMi4gRGlzdHJpYnV0ZSB0aGUgZXh0
cmEgc3BhY2UgYW1vbmcgdGhlIHNwYW5uZWQgY29sdW1ucy9yb3dzIGJhc2VkIG9uIHRoZSByZXNv
bHZlZCBzcGFjZSB2YWx1ZXMuCi0gICAgICAgICAgICAvLyBlLmcuIHNwYW5uaW5nIHdpZHRoOiBb
ICAgOSAgIF0uIFJlc29sdmVkIHdpZHRocyBmb3IgdGhlIHNwYW5uZWQgY29sdW1uczogWyAxIF0g
WyAyIF0KLSAgICAgICAgICAgIC8vIE5ldyByZXNvbHZlZCB3aWR0aHM6IFsgMyBdIFsgNiBdLgot
ICAgICAgICAgICAgYXV0byByZXNvbHZlZFNwYW5uaW5nU3BhY2UgPSBHcmlkU3BhY2UgeyB9Owot
ICAgICAgICAgICAgZm9yIChhdXRvIHNwYW5JbmRleCA9IFNwYW5UeXBlOjpzdGFydFNwYW4oY2Vs
bCk7IHNwYW5JbmRleCA8IFNwYW5UeXBlOjplbmRTcGFuKGNlbGwpOyArK3NwYW5JbmRleCkKLSAg
ICAgICAgICAgICAgICByZXNvbHZlZFNwYW5uaW5nU3BhY2UgKz0gKnJlc29sdmVkSXRlbXNbc3Bh
bkluZGV4XTsKLSAgICAgICAgICAgIGlmIChyZXNvbHZlZFNwYW5uaW5nU3BhY2UucHJlZmVycmVk
U2l6ZSA+PSB1bnJlc29sdmVkU3Bhbm5pbmdTcGFjZS5wcmVmZXJyZWRTaXplKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gVGhlIHNwYW5uaW5nIGNlbGwgZml0cyB0aGUgc3Bhbm5lZCBjb2x1bW5zL3Jv
d3MganVzdCBmaW5lLiBOb3RoaW5nIHRvIGRpc3RyaWJ1dGUuCi0gICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKyAgICB9OworICAgIGNvbGxlY3ROb25TcGFubmluZ0NlbGxzKCk7
CisKKyAgICBhdXRvIGNvbGxlY3RBbmREaXN0cmlidXRlU3Bhbm5pbmdDZWxscyA9IFsmXSB7Cisg
ICAgICAgIC8vIDIuIENvbGxlY3QgdGhlIHNwYW5uaW5nIGNlbGxzLgorICAgICAgICBzdHJ1Y3Qg
U3Bhbm5pbmdDZWxsIHsKKyAgICAgICAgICAgIFNsb3RQb3NpdGlvbiBwb3NpdGlvbjsKKyAgICAg
ICAgICAgIEdyaWRTcGFjZSB1bnJlc29sdmVkU3BhY2U7CisgICAgICAgIH07CisgICAgICAgIFZl
Y3RvcjxTcGFubmluZ0NlbGw+IHNwYW5uaW5nQ2VsbHM7CisgICAgICAgIGZvciAoc2l6ZV90IHJv
d0luZGV4ID0gMDsgcm93SW5kZXggPCByb3dzLnNpemUoKTsgKytyb3dJbmRleCkgeworICAgICAg
ICAgICAgZm9yIChzaXplX3QgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IGNvbHVtbnMu
c2l6ZSgpOyArK2NvbHVtbkluZGV4KSB7CisgICAgICAgICAgICAgICAgYXV0byYgc2xvdCA9ICpn
cmlkLnNsb3QoeyBjb2x1bW5JbmRleCwgcm93SW5kZXggfSk7CisgICAgICAgICAgICAgICAgaWYg
KFNwYW5UeXBlOjpoYXNTcGFuKHNsb3QpKQorICAgICAgICAgICAgICAgICAgICBzcGFubmluZ0Nl
bGxzLmFwcGVuZCh7IHsgY29sdW1uSW5kZXgsIHJvd0luZGV4IH0sIHNsb3RTcGFjZShzbG90LCBT
cGFuVHlwZTo6aW5kZXgoY29sdW1uSW5kZXgsIHJvd0luZGV4KSkgfSk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBhdXRvIHNwYWNpbmcgPSBTcGFuVHlwZTo6c3BhY2luZyhncmlkKSAqIChT
cGFuVHlwZTo6c3BhbkNvdW50KGNlbGwpIC0gMSk7Ci0gICAgICAgICAgICBhdXRvIHNwYWNlVG9E
aXN0cmlidXRlID0gdW5yZXNvbHZlZFNwYW5uaW5nU3BhY2UgLSBHcmlkU3BhY2UgeyB7IH0sIHNw
YWNpbmcsIHNwYWNpbmcgfSAtIHJlc29sdmVkU3Bhbm5pbmdTcGFjZTsKLSAgICAgICAgICAgIGlm
ICghc3BhY2VUb0Rpc3RyaWJ1dGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBj
b2x1bW5zRmxleEJhc2UgPSBzcGFjZVRvRGlzdHJpYnV0ZS5mbGV4QmFzZSAvIHJlc29sdmVkU3Bh
bm5pbmdTcGFjZS5mbGV4QmFzZTsKKyAgICAgICAgfQorICAgICAgICAvLyBXZSBuZWVkIHRoZXNl
IHNwYW5uaW5nIGNlbGxzIGluIHRoZSBvcmRlciBvZiB0aGUgbnVtYmVyIG9mIGNvbHVtbnMvcm93
cyB0aGV5IHNwYW4gc28gdGhhdAorICAgICAgICAvLyB3ZSBjYW4gcmVzb2x2ZSBvdmVybGFwcGlu
ZyBzcGFucyBzdGFydGluZyB3aXRoIHRoZSBzaG9ydGVyIG9uZXMgZS5nLgorICAgICAgICAvLyA8
dGQgY29sc3Bhbj00PiNhPC90ZD48dGQ+I2I8L3RkPgorICAgICAgICAvLyA8dGQgY29sc3Bhbj0y
PiNjPC90ZD48dGQgY29sc3Bhbj0zPiNkPC90ZD4KKyAgICAgICAgc3RkOjpzb3J0KHNwYW5uaW5n
Q2VsbHMuYmVnaW4oKSwgc3Bhbm5pbmdDZWxscy5lbmQoKSwgWyZdIChhdXRvJiBhLCBhdXRvJiBi
KSB7CisgICAgICAgICAgICByZXR1cm4gU3BhblR5cGU6OnNwYW5Db3VudChncmlkLnNsb3QoYS5w
b3NpdGlvbiktPmNlbGwoKSkgPCBTcGFuVHlwZTo6c3BhbkNvdW50KGdyaWQuc2xvdChiLnBvc2l0
aW9uKS0+Y2VsbCgpKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gMy4gRGlzdHJpYnV0ZSB0
aGUgc3Bhbm5pbmcgY2VsbHMnIG1pbWltdW0gc3BhY2UgYWNyb3NzIHRoZSBjb2x1bW5zL3Jvd3Mg
dXNpbmcgdGhlIG5vbi1zcGFubmluZyBzcGFjZXMuCisgICAgICAgIC8vIGUuZy4gWyAxIF1bIDUg
XVsgMSBdCisgICAgICAgIC8vICAgICAgWyAgICA5ICAgXVsgMSBdCisgICAgICAgIC8vIFRoZSBp
bml0aWFsIHdpZHRocyBhcmU6IFsgMiBdWyA3IF1bIDEgXQorICAgICAgICBmb3IgKGF1dG8gc3Bh
bm5pbmdDZWxsIDogc3Bhbm5pbmdDZWxscykgeworICAgICAgICAgICAgYXV0byYgY2VsbCA9IGdy
aWQuc2xvdChzcGFubmluZ0NlbGwucG9zaXRpb24pLT5jZWxsKCk7CisgICAgICAgICAgICBhdXRv
IHVucmVzb2x2ZWRTcGFubmluZ1NwYWNlID0gc3Bhbm5pbmdDZWxsLnVucmVzb2x2ZWRTcGFjZTsK
KyAgICAgICAgICAgIGlmICghcmVzb2x2ZWRJdGVtc1tTcGFuVHlwZTo6c3RhcnRTcGFuKGNlbGwp
XSB8fCAhcmVzb2x2ZWRJdGVtc1tTcGFuVHlwZTo6ZW5kU3BhbihjZWxsKSAtIDFdKSB7CisgICAg
ICAgICAgICAgICAgLy8gPHRkIGNvbHNwYW49ND4jYTwvdGQ+PHRkPiNiPC90ZD4KKyAgICAgICAg
ICAgICAgICAvLyA8dGQgY29sc3Bhbj0yPiNjPC90ZD48dGQgY29sc3Bhbj0zPiNkPC90ZD4KKyAg
ICAgICAgICAgICAgICAvLyBVbnJlc29sdmVkIGNvbHVtbnMgYXJlOiAxIDIgMyA0CisgICAgICAg
ICAgICAgICAgLy8gMS4gVGFrZSBjb2xzcGFuPTIgKHNob3J0ZXN0IHNwYW4pIGFuZCByZXNvbHZl
IGNvbHVtbiAxIGFuZCAyCisgICAgICAgICAgICAgICAgLy8gMi4gVGFrZSBjb2xzcGFuPTMgYW5k
IHJlc29sdmUgY29sdW1uIDMgYW5kIDQgKDUgaXMgcmVzb2x2ZWQgYmVjYXVzZSBpdCBhbHJlYWR5
IGhhcyBhIG5vbi1zcGFubmluZyBjZWxsKS4KKyAgICAgICAgICAgICAgICAvLyAzLiBjb2xzcGFu
PTQgbmVlZHMgbm8gcmVzb2x2aW5nIGJlY2F1c2UgYWxsIHRoZSBzcGFubmVkIGNvbHVtbnMgKDEg
MiAzIDQpIGhhdmUgYWxyZWFkeSBiZWVuIHJlc29sdmVkLgorICAgICAgICAgICAgICAgIGF1dG8g
dW5yZXNvbHZlZENvbHVtbkNvdW50ID0gY2VsbC5jb2x1bW5TcGFuKCk7CisgICAgICAgICAgICAg
ICAgZm9yIChhdXRvIHNwYW5JbmRleCA9IFNwYW5UeXBlOjpzdGFydFNwYW4oY2VsbCk7IHNwYW5J
bmRleCA8IFNwYW5UeXBlOjplbmRTcGFuKGNlbGwpOyArK3NwYW5JbmRleCkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIXJlc29sdmVkSXRlbXNbc3BhbkluZGV4XSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBBU1NFUlQodW5yZXNvbHZl
ZENvbHVtbkNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgLS11bnJlc29sdmVkQ29sdW1uQ291
bnQ7CisgICAgICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRTcGFubmluZ1NwYWNlIC09ICpyZXNv
bHZlZEl0ZW1zW3NwYW5JbmRleF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IEFTU0VSVCh1bnJlc29sdmVkQ29sdW1uQ291bnQpOworICAgICAgICAgICAgICAgIGF1dG8gZXF1
YWxTcGFjZUZvclNwYW5uZWRDb2x1bW5zID0gdW5yZXNvbHZlZFNwYW5uaW5nU3BhY2UgLyB1bnJl
c29sdmVkQ29sdW1uQ291bnQ7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIHNwYW5JbmRleCA9
IFNwYW5UeXBlOjpzdGFydFNwYW4oY2VsbCk7IHNwYW5JbmRleCA8IFNwYW5UeXBlOjplbmRTcGFu
KGNlbGwpOyArK3NwYW5JbmRleCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVzb2x2ZWRJ
dGVtc1tzcGFuSW5kZXhdKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgICAgIHJlc29sdmVkSXRlbXNbc3BhbkluZGV4XSA9IGVxdWFsU3BhY2VGb3JT
cGFubmVkQ29sdW1uczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIDEuIENvbGxlY3QgdGhlIG5vbi1zcGFubmluZyByZXNvbHZlZCBz
cGFjZXMuCisgICAgICAgICAgICAgICAgLy8gMi4gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2Ug
YW1vbmcgdGhlIHNwYW5uZWQgY29sdW1ucy9yb3dzIGJhc2VkIG9uIHRoZSByZXNvbHZlZCBzcGFj
ZSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgLy8gZS5nLiBzcGFubmluZyB3aWR0aDogWyAgIDkg
ICBdLiBSZXNvbHZlZCB3aWR0aHMgZm9yIHRoZSBzcGFubmVkIGNvbHVtbnM6IFsgMSBdIFsgMiBd
CisgICAgICAgICAgICAgICAgLy8gTmV3IHJlc29sdmVkIHdpZHRoczogWyAzIF0gWyA2IF0uCisg
ICAgICAgICAgICAgICAgYXV0byByZXNvbHZlZFNwYW5uaW5nU3BhY2UgPSBHcmlkU3BhY2UgeyB9
OwogICAgICAgICAgICAgICAgIGZvciAoYXV0byBzcGFuSW5kZXggPSBTcGFuVHlwZTo6c3RhcnRT
cGFuKGNlbGwpOyBzcGFuSW5kZXggPCBTcGFuVHlwZTo6ZW5kU3BhbihjZWxsKTsgKytzcGFuSW5k
ZXgpCi0gICAgICAgICAgICAgICAgICAgICpyZXNvbHZlZEl0ZW1zW3NwYW5JbmRleF0gKz0gR3Jp
ZFNwYWNlIHsgcmVzb2x2ZWRJdGVtc1tzcGFuSW5kZXhdLT50eXBlLCByZXNvbHZlZEl0ZW1zW3Nw
YW5JbmRleF0tPnByZWZlcnJlZFNpemUgKiBjb2x1bW5zRmxleEJhc2UsIHJlc29sdmVkSXRlbXNb
c3BhbkluZGV4XS0+ZmxleEJhc2UgKiBjb2x1bW5zRmxleEJhc2UgfTsKKyAgICAgICAgICAgICAg
ICAgICAgcmVzb2x2ZWRTcGFubmluZ1NwYWNlICs9ICpyZXNvbHZlZEl0ZW1zW3NwYW5JbmRleF07
CisgICAgICAgICAgICAgICAgaWYgKHJlc29sdmVkU3Bhbm5pbmdTcGFjZS5wcmVmZXJyZWRTaXpl
ID49IHVucmVzb2x2ZWRTcGFubmluZ1NwYWNlLnByZWZlcnJlZFNpemUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVGhlIHNwYW5uaW5nIGNlbGwgZml0cyB0aGUgc3Bhbm5lZCBjb2x1bW5zL3Jv
d3MganVzdCBmaW5lLiBOb3RoaW5nIHRvIGRpc3RyaWJ1dGUuCisgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhdXRvIHNwYWNp
bmcgPSBTcGFuVHlwZTo6c3BhY2luZyhncmlkKSAqIChTcGFuVHlwZTo6c3BhbkNvdW50KGNlbGwp
IC0gMSk7CisgICAgICAgICAgICAgICAgYXV0byBzcGFjZVRvRGlzdHJpYnV0ZSA9IHVucmVzb2x2
ZWRTcGFubmluZ1NwYWNlIC0gR3JpZFNwYWNlIHsgeyB9LCBzcGFjaW5nLCBzcGFjaW5nIH0gLSBy
ZXNvbHZlZFNwYW5uaW5nU3BhY2U7CisgICAgICAgICAgICAgICAgaWYgKCFzcGFjZVRvRGlzdHJp
YnV0ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byBjb2x1bW5zRmxleEJh
c2UgPSBzcGFjZVRvRGlzdHJpYnV0ZS5mbGV4QmFzZSAvIHJlc29sdmVkU3Bhbm5pbmdTcGFjZS5m
bGV4QmFzZTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvIHNwYW5JbmRleCA9IFNwYW5U
eXBlOjpzdGFydFNwYW4oY2VsbCk7IHNwYW5JbmRleCA8IFNwYW5UeXBlOjplbmRTcGFuKGNlbGwp
OyArK3NwYW5JbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgICpyZXNvbHZlZEl0ZW1zW3Nw
YW5JbmRleF0gKz0gR3JpZFNwYWNlIHsgcmVzb2x2ZWRJdGVtc1tzcGFuSW5kZXhdLT50eXBlLCBy
ZXNvbHZlZEl0ZW1zW3NwYW5JbmRleF0tPnByZWZlcnJlZFNpemUgKiBjb2x1bW5zRmxleEJhc2Us
IHJlc29sdmVkSXRlbXNbc3BhbkluZGV4XS0+ZmxleEJhc2UgKiBjb2x1bW5zRmxleEJhc2UgfTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0gICAg
Ly8gNC4gRGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3BhY2UgdXNpbmcgdGhlIGZpbmFsIHJlc29sdmVk
IHNpemVzLgorICAgIH07CisgICAgY29sbGVjdEFuZERpc3RyaWJ1dGVTcGFubmluZ0NlbGxzKCk7
CisKICAgICBWZWN0b3I8TGF5b3V0VW5pdD4gZGlzdHJpYnV0ZWRTcGFjZXMocmVzb2x2ZWRJdGVt
cy5zaXplKCkpOwotICAgIGZsb2F0IHNwYWNlVG9EaXN0cmlidXRlID0gYXZhaWxhYmxlU3BhY2Ug
LSAocmVzb2x2ZWRJdGVtcy5zaXplKCkgKyAxKSAqIFNwYW5UeXBlOjpzcGFjaW5nKGdyaWQpOwot
ICAgIGF1dG8gYWRqdXN0YWJsZWRTcGFjZSA9IEdyaWRTcGFjZSB7IH07Ci0gICAgZm9yIChhdXRv
JiByZXNvbHZlZEl0ZW0gOiByZXNvbHZlZEl0ZW1zKSB7Ci0gICAgICAgIEFTU0VSVChyZXNvbHZl
ZEl0ZW0pOwotICAgICAgICBhZGp1c3RhYmxlZFNwYWNlICs9ICpyZXNvbHZlZEl0ZW07Ci0gICAg
fQotICAgIHNwYWNlVG9EaXN0cmlidXRlIC09IGFkanVzdGFibGVkU3BhY2UucHJlZmVycmVkU2l6
ZTsKKyAgICBhdXRvIHNwYWNlVG9EaXN0cmlidXRlID0gMC5mOworICAgIGF1dG8gY29tcHV0ZVNw
YWNlVG9EaXN0cmlidXRlID0gWyZdIHsKKyAgICAgICAgLy8gNC4gRGlzdHJpYnV0ZSB0aGUgZXh0
cmEgc3BhY2UgdXNpbmcgdGhlIGZpbmFsIHJlc29sdmVkIHNpemVzLgorICAgICAgICBzcGFjZVRv
RGlzdHJpYnV0ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKHJlc29sdmVkSXRlbXMuc2l6ZSgpICsgMSkg
KiBTcGFuVHlwZTo6c3BhY2luZyhncmlkKTsKKyAgICAgICAgYXV0byBhZGp1c3RhYmxlZFNwYWNl
ID0gR3JpZFNwYWNlIHsgfTsKKyAgICAgICAgZm9yIChhdXRvJiByZXNvbHZlZEl0ZW0gOiByZXNv
bHZlZEl0ZW1zKSB7CisgICAgICAgICAgICBBU1NFUlQocmVzb2x2ZWRJdGVtKTsKKyAgICAgICAg
ICAgIGFkanVzdGFibGVkU3BhY2UgKz0gKnJlc29sdmVkSXRlbTsKKyAgICAgICAgfQorICAgICAg
ICBzcGFjZVRvRGlzdHJpYnV0ZSAtPSBhZGp1c3RhYmxlZFNwYWNlLnByZWZlcnJlZFNpemU7Cisg
ICAgfTsKKyAgICBjb21wdXRlU3BhY2VUb0Rpc3RyaWJ1dGUoKTsKKwogICAgIC8vIExldCdzIHN0
YXJ0IHdpdGggdGhlIHByZWZlcnJlZCBzaXplIGZvciBlYWNoIGNvbHVtbi4KICAgICBmb3IgKHNp
emVfdCBjb2x1bW5JbmRleCA9IDA7IGNvbHVtbkluZGV4IDwgcmVzb2x2ZWRJdGVtcy5zaXplKCk7
ICsrY29sdW1uSW5kZXgpCiAgICAgICAgIGRpc3RyaWJ1dGVkU3BhY2VzW2NvbHVtbkluZGV4XSA9
IExheW91dFVuaXQgeyByZXNvbHZlZEl0ZW1zW2NvbHVtbkluZGV4XS0+cHJlZmVycmVkU2l6ZSB9
OwogCi0gICAgaWYgKCFzcGFjZVRvRGlzdHJpYnV0ZSkgewotICAgICAgICAvLyBQcmVmZXJyZWQg
c2l6ZSBjb3ZlcnMgdGhlIHNwYWNlcy4gVGhlcmUncyBub3RoaW5nIGV4dHJhIHNwYWFjZSB0byBk
aXN0cmlidXRlLgotICAgICAgICByZXR1cm4gZGlzdHJpYnV0ZWRTcGFjZXM7Ci0gICAgfQotCi0g
ICAgLy8gU2V0dXAgdGhlIHByaW9yaXR5IGxpc3RzLiBXZSB1c2UgdGhlc2Ugd2hlbiBleHBhbmRp
bmcvc2hyaW5raW5nIHNsb3RzLgotICAgIFZlY3RvcjxzaXplX3Q+IGF1dG9Db2x1bW5JbmRleGVz
OwotICAgIFZlY3RvcjxzaXplX3Q+IHJlbGF0aXZlQ29sdW1uSW5kZXhlczsKLSAgICBWZWN0b3I8
c2l6ZV90PiBmaXhlZENvbHVtbkluZGV4ZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gcGVyY2VudENv
bHVtbkluZGV4ZXM7CisgICAgYXV0byBkaXN0cmlidXRlU3BhY2UgPSBbJl0geworICAgICAgICBp
ZiAoIXNwYWNlVG9EaXN0cmlidXRlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBT
ZXR1cCB0aGUgcHJpb3JpdHkgbGlzdHMuIFdlIHVzZSB0aGVzZSB3aGVuIGV4cGFuZGluZy9zaHJp
bmtpbmcgc2xvdHMuCisgICAgICAgIFZlY3RvcjxzaXplX3Q+IGF1dG9Db2x1bW5JbmRleGVzOwor
ICAgICAgICBWZWN0b3I8c2l6ZV90PiByZWxhdGl2ZUNvbHVtbkluZGV4ZXM7CisgICAgICAgIFZl
Y3RvcjxzaXplX3Q+IGZpeGVkQ29sdW1uSW5kZXhlczsKKyAgICAgICAgVmVjdG9yPHNpemVfdD4g
cGVyY2VudENvbHVtbkluZGV4ZXM7CisKKyAgICAgICAgZm9yIChzaXplX3QgY29sdW1uSW5kZXgg
PSAwOyBjb2x1bW5JbmRleCA8IHJlc29sdmVkSXRlbXMuc2l6ZSgpOyArK2NvbHVtbkluZGV4KSB7
CisgICAgICAgICAgICBzd2l0Y2ggKHJlc29sdmVkSXRlbXNbY29sdW1uSW5kZXhdLT50eXBlKSB7
CisgICAgICAgICAgICBjYXNlIEdyaWRTcGFjZTo6VHlwZTo6UGVyY2VudDoKKyAgICAgICAgICAg
ICAgICBwZXJjZW50Q29sdW1uSW5kZXhlcy5hcHBlbmQoY29sdW1uSW5kZXgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHcmlkU3BhY2U6OlR5cGU6OkZpeGVkOgor
ICAgICAgICAgICAgICAgIGZpeGVkQ29sdW1uSW5kZXhlcy5hcHBlbmQoY29sdW1uSW5kZXgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHcmlkU3BhY2U6OlR5cGU6
OlJlbGF0aXZlOgorICAgICAgICAgICAgICAgIHJlbGF0aXZlQ29sdW1uSW5kZXhlcy5hcHBlbmQo
Y29sdW1uSW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBH
cmlkU3BhY2U6OlR5cGU6OkF1dG86CisgICAgICAgICAgICAgICAgYXV0b0NvbHVtbkluZGV4ZXMu
YXBwZW5kKGNvbHVtbkluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgIGZvciAoc2l6
ZV90IGNvbHVtbkluZGV4ID0gMDsgY29sdW1uSW5kZXggPCByZXNvbHZlZEl0ZW1zLnNpemUoKTsg
Kytjb2x1bW5JbmRleCkgewotICAgICAgICBzd2l0Y2ggKHJlc29sdmVkSXRlbXNbY29sdW1uSW5k
ZXhdLT50eXBlKSB7Ci0gICAgICAgIGNhc2UgR3JpZFNwYWNlOjpUeXBlOjpQZXJjZW50OgotICAg
ICAgICAgICAgcGVyY2VudENvbHVtbkluZGV4ZXMuYXBwZW5kKGNvbHVtbkluZGV4KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyaWRTcGFjZTo6VHlwZTo6Rml4ZWQ6Ci0gICAg
ICAgICAgICBmaXhlZENvbHVtbkluZGV4ZXMuYXBwZW5kKGNvbHVtbkluZGV4KTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyaWRTcGFjZTo6VHlwZTo6UmVsYXRpdmU6Ci0gICAg
ICAgICAgICByZWxhdGl2ZUNvbHVtbkluZGV4ZXMuYXBwZW5kKGNvbHVtbkluZGV4KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyaWRTcGFjZTo6VHlwZTo6QXV0bzoKLSAgICAg
ICAgICAgIGF1dG9Db2x1bW5JbmRleGVzLmFwcGVuZChjb2x1bW5JbmRleCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChzcGFjZVRvRGlzdHJpYnV0ZSA+
IDApIHsKKyAgICAgICAgICAgIC8vIEVhY2ggY29sdW1uIGNhbiBnZXQgc29tZSBleHRyYSBzcGFj
ZS4KKyAgICAgICAgICAgIGF1dG8gaGFzU3BhY2VUb0Rpc3RyaWJ1dGUgPSBbJl0geworICAgICAg
ICAgICAgICAgIEFTU0VSVChzcGFjZVRvRGlzdHJpYnV0ZSA+IC1MYXlvdXRVbml0OjplcHNpbG9u
KCkpOworICAgICAgICAgICAgICAgIHJldHVybiBzcGFjZVRvRGlzdHJpYnV0ZSA+IExheW91dFVu
aXQ6OmVwc2lsb24oKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGF1dG8gZXhwYW5k
U3BhY2UgPSBbJl0oY29uc3QgYXV0byYgY29sdW1uSW5kZXhlcykgeworICAgICAgICAgICAgICAg
IGF1dG8gYWRqdXN0YWJsZWRTcGFjZSA9IEdyaWRTcGFjZSB7IH07CisgICAgICAgICAgICAgICAg
Zm9yIChhdXRvJiBjb2x1bW5JbmRleCA6IGNvbHVtbkluZGV4ZXMpCisgICAgICAgICAgICAgICAg
ICAgIGFkanVzdGFibGVkU3BhY2UgKz0gKnJlc29sdmVkSXRlbXNbY29sdW1uSW5kZXhdOworCisg
ICAgICAgICAgICAgICAgYXV0byBjb2x1bW5zRmxleEJhc2UgPSBhZGp1c3RhYmxlZFNwYWNlLmZs
ZXhCYXNlID8gc3BhY2VUb0Rpc3RyaWJ1dGUgLyBhZGp1c3RhYmxlZFNwYWNlLmZsZXhCYXNlIDog
MC5mOworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY29sdW1uSW5kZXggOiBjb2x1bW5JbmRl
eGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZXh0cmFTcGFjZSA9IGNvbHVtbnNGbGV4
QmFzZSAqIHJlc29sdmVkSXRlbXNbY29sdW1uSW5kZXhdLT5mbGV4QmFzZTsKKyAgICAgICAgICAg
ICAgICAgICAgZGlzdHJpYnV0ZWRTcGFjZXNbY29sdW1uSW5kZXhdICs9IExheW91dFVuaXQgeyBl
eHRyYVNwYWNlIH07CisgICAgICAgICAgICAgICAgICAgIHNwYWNlVG9EaXN0cmlidXRlIC09IGV4
dHJhU3BhY2U7CisgICAgICAgICAgICAgICAgICAgIGlmICghaGFzU3BhY2VUb0Rpc3RyaWJ1dGUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgLy8gV2UgZGlzdHJpYnV0ZSB0aGUgZXh0cmEgc3Bh
Y2UgYW1vbmcgY29sdW1ucyBpbiB0aGUgcHJpb3JpdHkgb3JkZXIgYXMgZm9sbG93czoKKyAgICAg
ICAgICAgIGV4cGFuZFNwYWNlKGZpeGVkQ29sdW1uSW5kZXhlcyk7CisgICAgICAgICAgICBpZiAo
aGFzU3BhY2VUb0Rpc3RyaWJ1dGUoKSkKKyAgICAgICAgICAgICAgICBleHBhbmRTcGFjZShwZXJj
ZW50Q29sdW1uSW5kZXhlcyk7CisgICAgICAgICAgICBpZiAoaGFzU3BhY2VUb0Rpc3RyaWJ1dGUo
KSkKKyAgICAgICAgICAgICAgICBleHBhbmRTcGFjZShyZWxhdGl2ZUNvbHVtbkluZGV4ZXMpOwor
ICAgICAgICAgICAgaWYgKGhhc1NwYWNlVG9EaXN0cmlidXRlKCkpCisgICAgICAgICAgICAgICAg
ZXhwYW5kU3BhY2UoYXV0b0NvbHVtbkluZGV4ZXMpOworICAgICAgICAgICAgQVNTRVJUKCFoYXNT
cGFjZVRvRGlzdHJpYnV0ZSgpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
IH0KKyAgICAgICAgLy8gQ2FuJ3QgYWNjb21tb2RhdGUgdGhlIHByZWZlcnJlZCB3aWR0aC4gTGV0
J3MgdXNlIHRoZSBwcmlvcml0eSBsaXN0IHRvIHNocmluayBjb2x1bW5zLgorICAgICAgICBhdXRv
IHNwYWNlTmVlZGVkID0gLXNwYWNlVG9EaXN0cmlidXRlOwogCi0gICAgaWYgKHNwYWNlVG9EaXN0
cmlidXRlID4gMCkgewotICAgICAgICAvLyBFYWNoIGNvbHVtbiBjYW4gZ2V0IHNvbWUgZXh0cmEg
c3BhY2UuCi0gICAgICAgIGF1dG8gaGFzU3BhY2VUb0Rpc3RyaWJ1dGUgPSBbJl0gewotICAgICAg
ICAgICAgQVNTRVJUKHNwYWNlVG9EaXN0cmlidXRlID4gLUxheW91dFVuaXQ6OmVwc2lsb24oKSk7
Ci0gICAgICAgICAgICByZXR1cm4gc3BhY2VUb0Rpc3RyaWJ1dGUgPiBMYXlvdXRVbml0OjplcHNp
bG9uKCk7CisgICAgICAgIGF1dG8gbmVlZHNNb3JlU3BhY2UgPSBbJl0geworICAgICAgICAgICAg
QVNTRVJUKHNwYWNlTmVlZGVkID4gLUxheW91dFVuaXQ6OmVwc2lsb24oKSk7CisgICAgICAgICAg
ICByZXR1cm4gc3BhY2VOZWVkZWQgPiBMYXlvdXRVbml0OjplcHNpbG9uKCk7CiAgICAgICAgIH07
CiAKLSAgICAgICAgYXV0byBleHBhbmRTcGFjZSA9IFsmXShjb25zdCBhdXRvJiBjb2x1bW5JbmRl
eGVzKSB7CisgICAgICAgIGF1dG8gc2hyaW5rU3BhY2UgPSBbJl0oY29uc3QgYXV0byYgY29sdW1u
SW5kZXhlcykgewogICAgICAgICAgICAgYXV0byBhZGp1c3RhYmxlZFNwYWNlID0gR3JpZFNwYWNl
IHsgfTsKICAgICAgICAgICAgIGZvciAoYXV0byYgY29sdW1uSW5kZXggOiBjb2x1bW5JbmRleGVz
KQogICAgICAgICAgICAgICAgIGFkanVzdGFibGVkU3BhY2UgKz0gKnJlc29sdmVkSXRlbXNbY29s
dW1uSW5kZXhdOwogCi0gICAgICAgICAgICBhdXRvIGNvbHVtbnNGbGV4QmFzZSA9IGFkanVzdGFi
bGVkU3BhY2UuZmxleEJhc2UgPyBzcGFjZVRvRGlzdHJpYnV0ZSAvIGFkanVzdGFibGVkU3BhY2Uu
ZmxleEJhc2UgOiAwLmY7CisgICAgICAgICAgICBhdXRvIGNvbHVtbnNGbGV4QmFzZSA9IGFkanVz
dGFibGVkU3BhY2UuZmxleEJhc2UgPyBzcGFjZU5lZWRlZCAvIGFkanVzdGFibGVkU3BhY2UuZmxl
eEJhc2UgOiAwLmY7CiAgICAgICAgICAgICBmb3IgKGF1dG8mIGNvbHVtbkluZGV4IDogY29sdW1u
SW5kZXhlcykgewotICAgICAgICAgICAgICAgIGF1dG8gZXh0cmFTcGFjZSA9IGNvbHVtbnNGbGV4
QmFzZSAqIHJlc29sdmVkSXRlbXNbY29sdW1uSW5kZXhdLT5mbGV4QmFzZTsKLSAgICAgICAgICAg
ICAgICBkaXN0cmlidXRlZFNwYWNlc1tjb2x1bW5JbmRleF0gKz0gTGF5b3V0VW5pdCB7IGV4dHJh
U3BhY2UgfTsKLSAgICAgICAgICAgICAgICBzcGFjZVRvRGlzdHJpYnV0ZSAtPSBleHRyYVNwYWNl
OwotICAgICAgICAgICAgICAgIGlmICghaGFzU3BhY2VUb0Rpc3RyaWJ1dGUoKSkKKyAgICAgICAg
ICAgICAgICBhdXRvJiByZXNvbHZlZEl0ZW0gPSAqcmVzb2x2ZWRJdGVtc1tjb2x1bW5JbmRleF07
CisgICAgICAgICAgICAgICAgYXV0byBzcGFjZVRvUmVtb3ZlID0gc3RkOjptaW4ocmVzb2x2ZWRJ
dGVtLnByZWZlcnJlZFNpemUgLSByZXNvbHZlZEl0ZW0ubWluaW11bVNpemUsIGNvbHVtbnNGbGV4
QmFzZSAqIHJlc29sdmVkSXRlbS5mbGV4QmFzZSk7CisgICAgICAgICAgICAgICAgc3BhY2VUb1Jl
bW92ZSA9IHN0ZDo6bWluKHNwYWNlVG9SZW1vdmUsIHNwYWNlTmVlZGVkKTsKKyAgICAgICAgICAg
ICAgICBkaXN0cmlidXRlZFNwYWNlc1tjb2x1bW5JbmRleF0gLT0gc3BhY2VUb1JlbW92ZTsKKyAg
ICAgICAgICAgICAgICBzcGFjZU5lZWRlZCAtPSBzcGFjZVRvUmVtb3ZlOworICAgICAgICAgICAg
ICAgIGlmICghbmVlZHNNb3JlU3BhY2UoKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICB9OwotICAgICAgICAvLyBXZSBkaXN0cmlidXRlIHRoZSBl
eHRyYSBzcGFjZSBhbW9uZyBjb2x1bW5zIGluIHRoZSBwcmlvcml0eSBvcmRlciBhcyBmb2xsb3dz
OgotICAgICAgICBleHBhbmRTcGFjZShmaXhlZENvbHVtbkluZGV4ZXMpOwotICAgICAgICBpZiAo
aGFzU3BhY2VUb0Rpc3RyaWJ1dGUoKSkKLSAgICAgICAgICAgIGV4cGFuZFNwYWNlKHBlcmNlbnRD
b2x1bW5JbmRleGVzKTsKLSAgICAgICAgaWYgKGhhc1NwYWNlVG9EaXN0cmlidXRlKCkpCi0gICAg
ICAgICAgICBleHBhbmRTcGFjZShyZWxhdGl2ZUNvbHVtbkluZGV4ZXMpOwotICAgICAgICBpZiAo
aGFzU3BhY2VUb0Rpc3RyaWJ1dGUoKSkKLSAgICAgICAgICAgIGV4cGFuZFNwYWNlKGF1dG9Db2x1
bW5JbmRleGVzKTsKLSAgICAgICAgQVNTRVJUKCFoYXNTcGFjZVRvRGlzdHJpYnV0ZSgpKTsKLSAg
ICAgICAgcmV0dXJuIGRpc3RyaWJ1dGVkU3BhY2VzOwotICAgIH0KLSAgICAvLyBDYW4ndCBhY2Nv
bW9kYXRlIHRoZSBwcmVmZXJyZWQgd2lkdGguIExldCdzIHVzZSB0aGUgcHJpb3JpdHkgbGlzdCB0
byBzaHJpbmsgY29sdW1ucy4KLSAgICBhdXRvIHNwYWNlTmVlZGVkID0gLXNwYWNlVG9EaXN0cmli
dXRlOwotCi0gICAgYXV0byBuZWVkc01vcmVTcGFjZSA9IFsmXSB7Ci0gICAgICAgIEFTU0VSVChz
cGFjZU5lZWRlZCA+IC1MYXlvdXRVbml0OjplcHNpbG9uKCkpOwotICAgICAgICByZXR1cm4gc3Bh
Y2VOZWVkZWQgPiBMYXlvdXRVbml0OjplcHNpbG9uKCk7CisgICAgICAgIHNocmlua1NwYWNlKGF1
dG9Db2x1bW5JbmRleGVzKTsKKyAgICAgICAgaWYgKG5lZWRzTW9yZVNwYWNlKCkpCisgICAgICAg
ICAgICBzaHJpbmtTcGFjZShyZWxhdGl2ZUNvbHVtbkluZGV4ZXMpOworICAgICAgICBpZiAobmVl
ZHNNb3JlU3BhY2UoKSkKKyAgICAgICAgICAgIHNocmlua1NwYWNlKGZpeGVkQ29sdW1uSW5kZXhl
cyk7CisgICAgICAgIGlmIChuZWVkc01vcmVTcGFjZSgpKQorICAgICAgICAgICAgc2hyaW5rU3Bh
Y2UocGVyY2VudENvbHVtbkluZGV4ZXMpOworICAgICAgICBBU1NFUlQoIW5lZWRzTW9yZVNwYWNl
KCkpOwogICAgIH07CisgICAgZGlzdHJpYnV0ZVNwYWNlKCk7CiAKLSAgICBhdXRvIHNocmlua1Nw
YWNlID0gWyZdKGNvbnN0IGF1dG8mIGNvbHVtbkluZGV4ZXMpIHsKLSAgICAgICAgYXV0byBhZGp1
c3RhYmxlZFNwYWNlID0gR3JpZFNwYWNlIHsgfTsKLSAgICAgICAgZm9yIChhdXRvJiBjb2x1bW5J
bmRleCA6IGNvbHVtbkluZGV4ZXMpCi0gICAgICAgICAgICBhZGp1c3RhYmxlZFNwYWNlICs9ICpy
ZXNvbHZlZEl0ZW1zW2NvbHVtbkluZGV4XTsKLQotICAgICAgICBhdXRvIGNvbHVtbnNGbGV4QmFz
ZSA9IGFkanVzdGFibGVkU3BhY2UuZmxleEJhc2UgPyBzcGFjZU5lZWRlZCAvIGFkanVzdGFibGVk
U3BhY2UuZmxleEJhc2UgOiAwLmY7Ci0gICAgICAgIGZvciAoYXV0byYgY29sdW1uSW5kZXggOiBj
b2x1bW5JbmRleGVzKSB7Ci0gICAgICAgICAgICBhdXRvJiByZXNvbHZlZEl0ZW0gPSAqcmVzb2x2
ZWRJdGVtc1tjb2x1bW5JbmRleF07Ci0gICAgICAgICAgICBhdXRvIHNwYWNlVG9SZW1vdmUgPSBz
dGQ6Om1pbihyZXNvbHZlZEl0ZW0ucHJlZmVycmVkU2l6ZSAtIHJlc29sdmVkSXRlbS5taW5pbXVt
U2l6ZSwgY29sdW1uc0ZsZXhCYXNlICogcmVzb2x2ZWRJdGVtLmZsZXhCYXNlKTsKLSAgICAgICAg
ICAgIHNwYWNlVG9SZW1vdmUgPSBzdGQ6Om1pbihzcGFjZVRvUmVtb3ZlLCBzcGFjZU5lZWRlZCk7
Ci0gICAgICAgICAgICBkaXN0cmlidXRlZFNwYWNlc1tjb2x1bW5JbmRleF0gLT0gc3BhY2VUb1Jl
bW92ZTsKLSAgICAgICAgICAgIHNwYWNlTmVlZGVkIC09IHNwYWNlVG9SZW1vdmU7Ci0gICAgICAg
ICAgICBpZiAoIW5lZWRzTW9yZVNwYWNlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfTsKLSAgICBzaHJpbmtTcGFjZShhdXRvQ29sdW1uSW5kZXhlcyk7Ci0gICAg
aWYgKG5lZWRzTW9yZVNwYWNlKCkpCi0gICAgICAgIHNocmlua1NwYWNlKHJlbGF0aXZlQ29sdW1u
SW5kZXhlcyk7Ci0gICAgaWYgKG5lZWRzTW9yZVNwYWNlKCkpCi0gICAgICAgIHNocmlua1NwYWNl
KGZpeGVkQ29sdW1uSW5kZXhlcyk7Ci0gICAgaWYgKG5lZWRzTW9yZVNwYWNlKCkpCi0gICAgICAg
IHNocmlua1NwYWNlKHBlcmNlbnRDb2x1bW5JbmRleGVzKTsKLSAgICBBU1NFUlQoIW5lZWRzTW9y
ZVNwYWNlKCkpOwogICAgIHJldHVybiBkaXN0cmlidXRlZFNwYWNlczsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>