<?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>178243</bug_id>
          
          <creation_ts>2017-10-12 16:14:11 -0700</creation_ts>
          <short_desc>Add Expected, HashMap, HashSet, and SHA1 to wtf/Forward.h</short_desc>
          <delta_ts>2017-10-12 17:40:29 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1359797</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-12 16:14:11 -0700</bug_when>
    <thetext>Add Expected, HashMap, HashSet, and SHA1 to wtf/Forward.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359799</commentid>
    <comment_count>1</comment_count>
      <attachid>323591</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-12 16:15:30 -0700</bug_when>
    <thetext>Created attachment 323591
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359801</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-12 16:18:04 -0700</bug_when>
    <thetext>Attachment 323591 did not pass style-queue:


ERROR: Source/WTF/wtf/HashSet.h:315:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:322:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:329:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/HashSet.h:336:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359850</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-10-12 17:40:08 -0700</bug_when>
    <thetext>http://trac.webkit.org/r223266</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359851</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-12 17:40:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/34968135&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323591</attachid>
            <date>2017-10-12 16:15:30 -0700</date>
            <delta_ts>2017-10-12 16:58:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-178243-20171012161531.patch</filename>
            <type>text/plain</type>
            <size>29437</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMjMyNjIpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE3LTEwLTEyICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIEV4cGVjdGVkLCBIYXNoTWFw
LCBIYXNoU2V0LCBhbmQgU0hBMSB0byB3dGYvRm9yd2FyZC5oCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgyNDMKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9Gb3J3YXJkLmg6CisgICAgICAgICog
d3RmL0hhc2hNYXAuaDoKKyAgICAgICAgTW92ZSBkZWZhdWx0IHBhcmFtZXRlcnMgdG8gRm9yd2Fy
ZC5oIGxpa2Ugd2UgZGlkIHdpdGggVmVjdG9yLgorICAgICAgICAqIHd0Zi9IYXNoU2V0Lmg6Cisg
ICAgICAgIEFsc28gZml4IGluZGVudGF0aW9uLgorCiAyMDE3LTEwLTEyICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgQWRkIENvbXBsZXRpb25I
YW5kbGVyIGFuZCBIYXNoQ291bnRlZFNldCB0byB3dGYvRm9yd2FyZC5oCkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9Gb3J3YXJkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRm9yd2FyZC5o
CShyZXZpc2lvbiAyMjMyNjIpCisrKyBTb3VyY2UvV1RGL3d0Zi9Gb3J3YXJkLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDggKzI4LDIyIEBAIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIG9wdGlv
bmFsOwogCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RydWN0IEZhc3RNYWxsb2M7CitjbGFzcyBBdG9t
aWNTdHJpbmc7CitjbGFzcyBBdG9taWNTdHJpbmdJbXBsOworY2xhc3MgQmluYXJ5U2VtYXBob3Jl
OworY2xhc3MgQ1N0cmluZzsKIGNsYXNzIENyYXNoT25PdmVyZmxvdzsKK2NsYXNzIEZ1bmN0aW9u
RGlzcGF0Y2hlcjsKK2NsYXNzIE9yZGluYWxOdW1iZXI7CitjbGFzcyBQcmludFN0cmVhbTsKK2Ns
YXNzIFNIQTE7CitjbGFzcyBTdHJpbmc7CitjbGFzcyBTdHJpbmdCdWlsZGVyOworY2xhc3MgU3Ry
aW5nSW1wbDsKK2NsYXNzIFN0cmluZ1ZpZXc7CitjbGFzcyBUZXh0UG9zaXRpb247CisKK3N0cnVj
dCBGYXN0TWFsbG9jOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgQ29tcGxldGlvbkhhbmRs
ZXI7CiB0ZW1wbGF0ZTx0eXBlbmFtZT4gY2xhc3MgRnVuY3Rpb247CkBAIC00NCwyMSArNTgsMTEg
QEAgdGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEZWZhdWx0SGFzaCB7IAogdGVtcGxhdGU8dHlw
ZW5hbWU+IHN0cnVjdCBIYXNoVHJhaXRzOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3Mg
VmFyaWFudDsKLXRlbXBsYXRlPHR5cGVuYW1lLCBzaXplX3QgaW5saW5lQ2FwYWNpdHkgPSAwLCB0
eXBlbmFtZSBPdmVyZmxvd0hhbmRsZXIgPSBDcmFzaE9uT3ZlcmZsb3csIHNpemVfdCBtaW5DYXBh
Y2l0eSA9IDE2LCB0eXBlbmFtZSBNYWxsb2MgPSBGYXN0TWFsbG9jPiBjbGFzcyBWZWN0b3I7Ci10
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucyA9IHR5cGVuYW1l
IERlZmF1bHRIYXNoPFZhbHVlPjo6SGFzaCwgdHlwZW5hbWUgVHJhaXRzID0gSGFzaFRyYWl0czxW
YWx1ZT4+IGNsYXNzIEhhc2hDb3VudGVkU2V0OwotCi1jbGFzcyBBdG9taWNTdHJpbmc7Ci1jbGFz
cyBBdG9taWNTdHJpbmdJbXBsOwotY2xhc3MgQmluYXJ5U2VtYXBob3JlOwotY2xhc3MgQ1N0cmlu
ZzsKLWNsYXNzIEZ1bmN0aW9uRGlzcGF0Y2hlcjsKLWNsYXNzIE9yZGluYWxOdW1iZXI7Ci1jbGFz
cyBQcmludFN0cmVhbTsKLWNsYXNzIFN0cmluZzsKLWNsYXNzIFN0cmluZ0J1aWxkZXI7Ci1jbGFz
cyBTdHJpbmdJbXBsOwotY2xhc3MgU3RyaW5nVmlldzsKLWNsYXNzIFRleHRQb3NpdGlvbjsKK3Rl
bXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgRXhwZWN0ZWQ7Cit0ZW1wbGF0ZTx0eXBlbmFtZSwg
c2l6ZV90ID0gMCwgdHlwZW5hbWUgPSBDcmFzaE9uT3ZlcmZsb3csIHNpemVfdCA9IDE2LCB0eXBl
bmFtZSA9IEZhc3RNYWxsb2M+IGNsYXNzIFZlY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
LCB0eXBlbmFtZSA9IHR5cGVuYW1lIERlZmF1bHRIYXNoPFZhbHVlPjo6SGFzaCwgdHlwZW5hbWUg
PSBIYXNoVHJhaXRzPFZhbHVlPj4gY2xhc3MgSGFzaENvdW50ZWRTZXQ7Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXlBcmcsIHR5cGVuYW1lIE1hcHBlZEFyZywgdHlwZW5hbWUgPSB0eXBlbmFtZSBEZWZh
dWx0SGFzaDxLZXlBcmc+OjpIYXNoLCB0eXBlbmFtZSA9IEhhc2hUcmFpdHM8S2V5QXJnPiwgdHlw
ZW5hbWUgPSBIYXNoVHJhaXRzPE1hcHBlZEFyZz4+IGNsYXNzIEhhc2hNYXA7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgPSB0eXBlbmFtZSBEZWZhdWx0SGFzaDxWYWx1ZUFy
Zz46Okhhc2gsIHR5cGVuYW1lID0gSGFzaFRyYWl0czxWYWx1ZUFyZz4+IGNsYXNzIEhhc2hTZXQ7
CiAKIH0KIApAQCAtNjcsOSArNzEsMTIgQEAgdXNpbmcgV1RGOjpBdG9taWNTdHJpbmdJbXBsOwog
dXNpbmcgV1RGOjpCaW5hcnlTZW1hcGhvcmU7CiB1c2luZyBXVEY6OkNvbXBsZXRpb25IYW5kbGVy
OwogdXNpbmcgV1RGOjpDU3RyaW5nOwordXNpbmcgV1RGOjpFeHBlY3RlZDsKIHVzaW5nIFdURjo6
RnVuY3Rpb247CiB1c2luZyBXVEY6OkZ1bmN0aW9uRGlzcGF0Y2hlcjsKIHVzaW5nIFdURjo6SGFz
aENvdW50ZWRTZXQ7Cit1c2luZyBXVEY6Okhhc2hNYXA7Cit1c2luZyBXVEY6Okhhc2hTZXQ7CiB1
c2luZyBXVEY6OkxhenlOZXZlckRlc3Ryb3llZDsKIHVzaW5nIFdURjo6TmV2ZXJEZXN0cm95ZWQ7
CiB1c2luZyBXVEY6Ok9wdGlvblNldDsKQEAgLTc3LDYgKzg0LDcgQEAgdXNpbmcgV1RGOjpPcmRp
bmFsTnVtYmVyOwogdXNpbmcgV1RGOjpQcmludFN0cmVhbTsKIHVzaW5nIFdURjo6UmVmOwogdXNp
bmcgV1RGOjpSZWZQdHI7Cit1c2luZyBXVEY6OlNIQTE7CiB1c2luZyBXVEY6OlN0cmluZzsKIHVz
aW5nIFdURjo6U3RyaW5nQnVmZmVyOwogdXNpbmcgV1RGOjpTdHJpbmdCdWlsZGVyOwpJbmRleDog
U291cmNlL1dURi93dGYvSGFzaE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hh
c2hNYXAuaAkocmV2aXNpb24gMjIzMjYyKQorKysgU291cmNlL1dURi93dGYvSGFzaE1hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIFdURl9IYXNoTWFwX2gKIAog
I2luY2x1ZGUgPGluaXRpYWxpemVyX2xpc3Q+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL0l0ZXJhdG9yUmFuZ2UuaD4K
IApAQCAtMzEsOCArMzIsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgS2V5VmFsdWVQ
YWlyCiAgICAgc3RhdGljIGNvbnN0IHR5cGVuYW1lIFQ6OktleVR5cGUmIGV4dHJhY3QoY29uc3Qg
VCYgcCkgeyByZXR1cm4gcC5rZXk7IH0KIH07CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywg
dHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFtZSBIYXNoQXJnID0gdHlwZW5hbWUgRGVmYXVsdEhh
c2g8S2V5QXJnPjo6SGFzaCwKLSAgICB0eXBlbmFtZSBLZXlUcmFpdHNBcmcgPSBIYXNoVHJhaXRz
PEtleUFyZz4sIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0FyZyA9IEhhc2hUcmFpdHM8TWFwcGVkQXJn
Pj4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleUFyZywgdHlwZW5hbWUgTWFwcGVkQXJnLCB0eXBlbmFt
ZSBIYXNoQXJnLCB0eXBlbmFtZSBLZXlUcmFpdHNBcmcsIHR5cGVuYW1lIE1hcHBlZFRyYWl0c0Fy
Zz4KIGNsYXNzIEhhc2hNYXAgZmluYWwgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHJldmlzaW9uIDIyMzI2MikKKysrIFNvdXJjZS9XVEYv
d3RmL0hhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIsMzY1ICsyMiwzNjQgQEAKICNkZWZp
bmUgV1RGX0hhc2hTZXRfaAogCiAjaW5jbHVkZSA8aW5pdGlhbGl6ZXJfbGlzdD4KKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KICNpbmNsdWRlIDx3dGYv
SGFzaFRhYmxlLmg+CiAKIG5hbWVzcGFjZSBXVEYgewogCi0gICAgc3RydWN0IElkZW50aXR5RXh0
cmFjdG9yOwotICAgIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNo
RnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+IGNsYXNzIEhhc2hTZXQ7Ci0KLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZyA9IHR5cGVuYW1lIERlZmF1bHRI
YXNoPFZhbHVlQXJnPjo6SGFzaCwKLSAgICAgICAgdHlwZW5hbWUgVHJhaXRzQXJnID0gSGFzaFRy
YWl0czxWYWx1ZUFyZz4+IGNsYXNzIEhhc2hTZXQgZmluYWwgewotICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hBcmcgSGFz
aEZ1bmN0aW9uczsKLSAgICAgICAgdHlwZWRlZiBUcmFpdHNBcmcgVmFsdWVUcmFpdHM7Ci0gICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFpdHM6OlRha2VUeXBlIFRha2VUeXBlOwotCi0g
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpUcmFpdFR5
cGUgVmFsdWVUeXBlOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoVGFibGU8
VmFsdWVUeXBlLCBWYWx1ZVR5cGUsIElkZW50aXR5RXh0cmFjdG9yLAotICAgICAgICAgICAgSGFz
aEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPiBIYXNoVGFibGVUeXBlOwotCi0g
ICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIEhhc2hUYWJsZUNvbnN0SXRlcmF0b3JBZGFwdGVy
PEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT4gaXRlcmF0b3I7Ci0gICAgICAgIHR5cGVkZWYgSGFz
aFRhYmxlQ29uc3RJdGVyYXRvckFkYXB0ZXI8SGFzaFRhYmxlVHlwZSwgVmFsdWVUeXBlPiBjb25z
dF9pdGVyYXRvcjsKLSAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBIYXNoVGFibGVUeXBlOjpBZGRS
ZXN1bHQgQWRkUmVzdWx0OwotCi0gICAgICAgIEhhc2hTZXQoKQotICAgICAgICB7Ci0gICAgICAg
IH0KLQotICAgICAgICBIYXNoU2V0KHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxWYWx1ZUFyZz4gaW5p
dGlhbGl6ZXJMaXN0KQotICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIHZh
bHVlIDogaW5pdGlhbGl6ZXJMaXN0KQotICAgICAgICAgICAgICAgIGFkZCh2YWx1ZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICB2b2lkIHN3YXAoSGFzaFNldCYpOwotCi0gICAgICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdDsKLSAgICAgICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdDsKLSAgICAg
ICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7Ci0KLSAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25z
dDsKLSAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Q7Ci0KLSAgICAgICAgaXRlcmF0b3IgZmlu
ZChjb25zdCBWYWx1ZVR5cGUmKSBjb25zdDsKLSAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBW
YWx1ZVR5cGUmKSBjb25zdDsKLQotICAgICAgICAvLyBBbiBhbHRlcm5hdGUgdmVyc2lvbiBvZiBm
aW5kKCkgdGhhdCBmaW5kcyB0aGUgb2JqZWN0IGJ5IGhhc2hpbmcgYW5kIGNvbXBhcmluZwotICAg
ICAgICAvLyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBj
b252ZXJzaW9uLiBIYXNoVHJhbnNsYXRvcgotICAgICAgICAvLyBtdXN0IGhhdmUgdGhlIGZvbGxv
d2luZyBmdW5jdGlvbiBtZW1iZXJzOgotICAgICAgICAvLyAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IFQmKTsKLSAgICAgICAgLy8gICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBWYWx1ZVR5
cGUmLCBjb25zdCBUJik7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9y
LCB0eXBlbmFtZSBUPiBpdGVyYXRvciBmaW5kKGNvbnN0IFQmKSBjb25zdDsKLSAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGJvb2wgY29udGFpbnMo
Y29uc3QgVCYpIGNvbnN0OwotCi0gICAgICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaW5jbHVkZXMg
Ym90aCBhbiBpdGVyYXRvciB0byB0aGUgYWRkZWQgdmFsdWUncyBsb2NhdGlvbiwKLSAgICAgICAg
Ly8gYW5kIGFuIGlzTmV3RW50cnkgYm9vbCB0aGF0IGluZGljYXRlcyBpZiBpdCBpcyBhIG5ldyBv
ciBleGlzdGluZyBlbnRyeSBpbiB0aGUgc2V0LgotICAgICAgICBBZGRSZXN1bHQgYWRkKGNvbnN0
IFZhbHVlVHlwZSYpOwotICAgICAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYmKTsKLSAgICAg
ICAgdm9pZCBhZGQoc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8
Y29uc3QgVmFsdWVUeXBlPj4pOwotCi0gICAgICAgIHZvaWQgYWRkVm9pZChjb25zdCBWYWx1ZVR5
cGUmKTsKLSAgICAgICAgdm9pZCBhZGRWb2lkKFZhbHVlVHlwZSYmKTsKLQotICAgICAgICAvLyBB
biBhbHRlcm5hdGUgdmVyc2lvbiBvZiBhZGQoKSB0aGF0IGZpbmRzIHRoZSBvYmplY3QgYnkgaGFz
aGluZyBhbmQgY29tcGFyaW5nCi0gICAgICAgIC8vIHdpdGggc29tZSBvdGhlciB0eXBlLCB0byBh
dm9pZCB0aGUgY29zdCBvZiB0eXBlIGNvbnZlcnNpb24gaWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5
Ci0gICAgICAgIC8vIGluIHRoZSB0YWJsZS4gSGFzaFRyYW5zbGF0b3IgbXVzdCBoYXZlIHRoZSBm
b2xsb3dpbmcgZnVuY3Rpb24gbWVtYmVyczoKLSAgICAgICAgLy8gICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBUJik7Ci0gICAgICAgIC8vICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFs
dWVUeXBlJiwgY29uc3QgVCYpOwotICAgICAgICAvLyAgIHN0YXRpYyB0cmFuc2xhdGUoVmFsdWVU
eXBlJiwgY29uc3QgVCYsIHVuc2lnbmVkIGhhc2hDb2RlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IEFkZFJlc3VsdCBhZGQoY29uc3QgVCYp
OwotICAgICAgICAKLSAgICAgICAgLy8gQXR0ZW1wdHMgdG8gYWRkIGEgbGlzdCBvZiB0aGluZ3Mg
dG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFueSBvZgotICAgICAgICAvLyB0aGVtIGFyZSBu
ZXcgdG8gdGhlIHNldC4gUmV0dXJucyBmYWxzZSBpZiB0aGUgc2V0IGlzIHVuY2hhbmdlZC4KLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgotICAgICAgICBib29sIGFkZChJ
dGVyYXRvclR5cGUgYmVnaW4sIEl0ZXJhdG9yVHlwZSBlbmQpOwotCi0gICAgICAgIGJvb2wgcmVt
b3ZlKGNvbnN0IFZhbHVlVHlwZSYpOwotICAgICAgICBib29sIHJlbW92ZShpdGVyYXRvcik7Ci0g
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci0gICAgICAgIHZvaWQgcmVtb3ZlSWYo
Y29uc3QgRnVuY3RvciYpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0KLSAgICAgICAgVGFrZVR5
cGUgdGFrZShjb25zdCBWYWx1ZVR5cGUmKTsKLSAgICAgICAgVGFrZVR5cGUgdGFrZShpdGVyYXRv
cik7Ci0gICAgICAgIFRha2VUeXBlIHRha2VBbnkoKTsKLQotICAgICAgICAvLyBPdmVybG9hZHMg
Zm9yIHNtYXJ0IHBvaW50ZXIgdmFsdWVzIHRoYXQgdGFrZSB0aGUgcmF3IHBvaW50ZXIgdHlwZSBh
cyB0aGUgcGFyYW1ldGVyLgotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWID0gVmFsdWVUeXBl
PiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+
Ojp0eXBlIGZpbmQodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKSBjb25zdDsKLSAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFi
bGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlIGNvbnRhaW5zKHR5cGVuYW1l
IEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSkgY29uc3Q7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFYgPSBWYWx1ZVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46
OnZhbHVlLCBib29sPjo6dHlwZSByZW1vdmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJU
eXBlKTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIFRha2VUeXBlPjo6dHlwZSB0YWtl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSk7Ci0KLSAgICAgICAgc3RhdGljIGJv
b2wgaXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYpOwotCi0gICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE90
aGVyQ29sbGVjdGlvbiYpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgT3RoZXJDb2xsZWN0aW9uPgotICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgT3RoZXJD
b2xsZWN0aW9uJikgY29uc3Q7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBIYXNoVGFibGVUeXBl
IG1faW1wbDsKLSAgICB9OwotCi0gICAgc3RydWN0IElkZW50aXR5RXh0cmFjdG9yIHsKLSAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIGNvbnN0IFQmIGV4dHJhY3QoY29uc3QgVCYg
dCkgeyByZXR1cm4gdDsgfQotICAgIH07Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVRy
YWl0cywgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucz4KLSAgICBzdHJ1Y3QgSGFzaFNldFRyYW5zbGF0
b3IgewotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBUJiBrZXkpIHsgcmV0dXJuIEhhc2hGdW5jdGlvbnM6Omhhc2goa2V5KTsgfQotICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBUJiBhLCBjb25zdCBVJiBiKSB7IHJldHVybiBIYXNoRnVuY3Rpb25zOjplcXVhbChhLCBiKTsg
fQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBz
dGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24sIFUmJiwgViYmIHZhbHVlKQotICAgICAg
ICB7IAotICAgICAgICAgICAgVmFsdWVUcmFpdHM6OmFzc2lnblRvRW1wdHkobG9jYXRpb24sIHN0
ZDo6Zm9yd2FyZDxWPih2YWx1ZSkpOwotICAgICAgICB9Ci0gICAgfTsKLQotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFRyYW5zbGF0b3I+Ci0gICAgc3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRl
ciB7Ci0gICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IFQmIGtleSkgeyByZXR1cm4gVHJhbnNsYXRvcjo6aGFzaChrZXkpOyB9Ci0gICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFQm
IGEsIGNvbnN0IFUmIGIpIHsgcmV0dXJuIFRyYW5zbGF0b3I6OmVxdWFsKGEsIGIpOyB9Ci0gICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyB2b2lkIHRyYW5zbGF0
ZShUJiBsb2NhdGlvbiwgY29uc3QgVSYga2V5LCBjb25zdCBVJiwgdW5zaWduZWQgaGFzaENvZGUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFRyYW5zbGF0b3I6OnRyYW5zbGF0ZShsb2NhdGlvbiwg
a2V5LCBoYXNoQ29kZSk7Ci0gICAgICAgIH0KLSAgICB9OwotCi0gICAgdGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgdm9pZCBIYXNoU2V0PFQs
IFUsIFY+Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQotICAgIHsKLSAgICAgICAgbV9pbXBsLnN3YXAo
b3RoZXIubV9pbXBsKTsgCi0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6
c2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLnNpemUoKTsgCi0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAg
ICBpbmxpbmUgdW5zaWduZWQgSGFzaFNldDxULCBVLCBWPjo6Y2FwYWNpdHkoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC5jYXBhY2l0eSgpOyAKLSAgICB9Ci0KLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgVj46OmlzRW1wdHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faW1wbC5pc0VtcHR5KCk7IAotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6
YmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvcgotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC5i
ZWdpbigpOyAKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0
eXBlbmFtZSBWPgotICAgIGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmVuZCgpIGNvbnN0
IC0+IGl0ZXJhdG9yCi0gICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLmVuZCgpOyAKLSAgICB9
Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAg
IGlubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmZpbmQoY29uc3QgVmFsdWVUeXBlJiB2YWx1
ZSkgY29uc3QgLT4gaXRlcmF0b3IKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwuZmluZCh2
YWx1ZSk7IAotICAgIH0KK3N0cnVjdCBJZGVudGl0eUV4dHJhY3RvcjsKIAotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgaW5saW5lIGJvb2wgSGFz
aFNldDxULCBVLCBWPjo6Y29udGFpbnMoY29uc3QgVmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwuY29udGFpbnModmFsdWUpOyAKLSAgICB9Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZUFyZywgdHlwZW5hbWUgSGFzaEFyZywgdHlwZW5hbWUgVHJhaXRz
QXJnPgorY2xhc3MgSGFzaFNldCBmaW5hbCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Citwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaEFyZyBIYXNoRnVuY3Rpb25zOworICAgIHR5cGVk
ZWYgVHJhaXRzQXJnIFZhbHVlVHJhaXRzOworICAgIHR5cGVkZWYgdHlwZW5hbWUgVmFsdWVUcmFp
dHM6OlRha2VUeXBlIFRha2VUeXBlOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5
cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KLSAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUgVD4KLSAgICBpbmxpbmUgYXV0byBIYXNoU2V0
PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBjb25z
dCAtPiBpdGVyYXRvcgotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5k
PEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKLSAgICB9
CitwdWJsaWM6CisgICAgdHlwZWRlZiB0eXBlbmFtZSBWYWx1ZVRyYWl0czo6VHJhaXRUeXBlIFZh
bHVlVHlwZTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5z
bGF0b3IsIHR5cGVuYW1lIFQ+Ci0gICAgaW5saW5lIGJvb2wgSGFzaFNldDxWYWx1ZSwgSGFzaEZ1
bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gbV9pbXBsLnRlbXBsYXRlIGNvbnRhaW5zPEhhc2hTZXRUcmFuc2xhdG9y
QWRhcHRlcjxIYXNoVHJhbnNsYXRvcj4+KHZhbHVlKTsKLSAgICB9Citwcml2YXRlOgorICAgIHR5
cGVkZWYgSGFzaFRhYmxlPFZhbHVlVHlwZSwgVmFsdWVUeXBlLCBJZGVudGl0eUV4dHJhY3RvciwK
KyAgICAgICAgSGFzaEZ1bmN0aW9ucywgVmFsdWVUcmFpdHMsIFZhbHVlVHJhaXRzPiBIYXNoVGFi
bGVUeXBlOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KLSAgICBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoY29uc3QgVmFsdWVUeXBl
JiB2YWx1ZSkgLT4gQWRkUmVzdWx0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9pbXBsLmFkZCh2
YWx1ZSk7Ci0gICAgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KLSAgICBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+OjphZGQoVmFsdWVUeXBl
JiYgdmFsdWUpIC0+IEFkZFJlc3VsdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC5hZGQo
V1RGTW92ZSh2YWx1ZSkpOwotICAgIH0KK3B1YmxpYzoKKyAgICB0eXBlZGVmIEhhc2hUYWJsZUNv
bnN0SXRlcmF0b3JBZGFwdGVyPEhhc2hUYWJsZVR5cGUsIFZhbHVlVHlwZT4gaXRlcmF0b3I7Cisg
ICAgdHlwZWRlZiBIYXNoVGFibGVDb25zdEl0ZXJhdG9yQWRhcHRlcjxIYXNoVGFibGVUeXBlLCBW
YWx1ZVR5cGU+IGNvbnN0X2l0ZXJhdG9yOworICAgIHR5cGVkZWYgdHlwZW5hbWUgSGFzaFRhYmxl
VHlwZTo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5
cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6
YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQorICAgIEhhc2hTZXQoKQogICAgIHsKLSAg
ICAgICAgbV9pbXBsLmFkZCh2YWx1ZSk7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUs
IFY+OjphZGRWb2lkKFZhbHVlVHlwZSYmIHZhbHVlKQorICAgIEhhc2hTZXQoc3RkOjppbml0aWFs
aXplcl9saXN0PFZhbHVlQXJnPiBpbml0aWFsaXplckxpc3QpCiAgICAgewotICAgICAgICBtX2lt
cGwuYWRkKFdURk1vdmUodmFsdWUpKTsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiB2YWx1ZSA6
IGluaXRpYWxpemVyTGlzdCkKKyAgICAgICAgICAgIGFkZCh2YWx1ZSk7CiAgICAgfQogCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1l
IFRyYWl0cz4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VD4KLSAgICBpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+
OjphZGQoY29uc3QgVCYgdmFsdWUpIC0+IEFkZFJlc3VsdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1faW1wbC50ZW1wbGF0ZSBhZGRQYXNzaW5nSGFzaENvZGU8SGFzaFNldFRyYW5zbGF0b3JBZGFw
dGVyPEhhc2hUcmFuc2xhdG9yPj4odmFsdWUsIHZhbHVlKTsKLSAgICB9CisgICAgdm9pZCBzd2Fw
KEhhc2hTZXQmKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVu
YW1lIFY+CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNhcGFjaXR5
KCkgY29uc3Q7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7CisKKyAgICBpdGVyYXRvciBiZWdp
bigpIGNvbnN0OworICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0OworCisgICAgaXRlcmF0b3IgZmlu
ZChjb25zdCBWYWx1ZVR5cGUmKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFZhbHVl
VHlwZSYpIGNvbnN0OworCisgICAgLy8gQW4gYWx0ZXJuYXRlIHZlcnNpb24gb2YgZmluZCgpIHRo
YXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNoaW5nIGFuZCBjb21wYXJpbmcKKyAgICAvLyB3aXRo
IHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNvc3Qgb2YgdHlwZSBjb252ZXJzaW9uLiBI
YXNoVHJhbnNsYXRvcgorICAgIC8vIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIG1l
bWJlcnM6CisgICAgLy8gICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUJik7CisgICAgLy8g
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBWYWx1ZVR5cGUmLCBjb25zdCBUJik7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5cGVuYW1lIFQ+IGl0ZXJhdG9yIGZpbmQo
Y29uc3QgVCYpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0
eXBlbmFtZSBUPiBib29sIGNvbnRhaW5zKGNvbnN0IFQmKSBjb25zdDsKKworICAgIC8vIFRoZSBy
ZXR1cm4gdmFsdWUgaW5jbHVkZXMgYm90aCBhbiBpdGVyYXRvciB0byB0aGUgYWRkZWQgdmFsdWUn
cyBsb2NhdGlvbiwKKyAgICAvLyBhbmQgYW4gaXNOZXdFbnRyeSBib29sIHRoYXQgaW5kaWNhdGVz
IGlmIGl0IGlzIGEgbmV3IG9yIGV4aXN0aW5nIGVudHJ5IGluIHRoZSBzZXQuCisgICAgQWRkUmVz
dWx0IGFkZChjb25zdCBWYWx1ZVR5cGUmKTsKKyAgICBBZGRSZXN1bHQgYWRkKFZhbHVlVHlwZSYm
KTsKKyAgICB2b2lkIGFkZChzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxjb25zdCBWYWx1ZVR5cGU+Pik7CisKKyAgICB2b2lkIGFkZFZvaWQoY29uc3QgVmFsdWVU
eXBlJik7CisgICAgdm9pZCBhZGRWb2lkKFZhbHVlVHlwZSYmKTsKKworICAgIC8vIEFuIGFsdGVy
bmF0ZSB2ZXJzaW9uIG9mIGFkZCgpIHRoYXQgZmluZHMgdGhlIG9iamVjdCBieSBoYXNoaW5nIGFu
ZCBjb21wYXJpbmcKKyAgICAvLyB3aXRoIHNvbWUgb3RoZXIgdHlwZSwgdG8gYXZvaWQgdGhlIGNv
c3Qgb2YgdHlwZSBjb252ZXJzaW9uIGlmIHRoZSBvYmplY3QgaXMgYWxyZWFkeQorICAgIC8vIGlu
IHRoZSB0YWJsZS4gSGFzaFRyYW5zbGF0b3IgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmcgZnVuY3Rp
b24gbWVtYmVyczoKKyAgICAvLyAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmKTsKKyAg
ICAvLyAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlVHlwZSYsIGNvbnN0IFQmKTsKKyAg
ICAvLyAgIHN0YXRpYyB0cmFuc2xhdGUoVmFsdWVUeXBlJiwgY29uc3QgVCYsIHVuc2lnbmVkIGhh
c2hDb2RlKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJhbnNsYXRvciwgdHlwZW5hbWUg
VD4gQWRkUmVzdWx0IGFkZChjb25zdCBUJik7CisgICAgCisgICAgLy8gQXR0ZW1wdHMgdG8gYWRk
IGEgbGlzdCBvZiB0aGluZ3MgdG8gdGhlIHNldC4gUmV0dXJucyB0cnVlIGlmIGFueSBvZgorICAg
IC8vIHRoZW0gYXJlIG5ldyB0byB0aGUgc2V0LiBSZXR1cm5zIGZhbHNlIGlmIHRoZSBzZXQgaXMg
dW5jaGFuZ2VkLgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yVHlwZT4KLSAgICBpbmxp
bmUgYm9vbCBIYXNoU2V0PFQsIFUsIFY+OjphZGQoSXRlcmF0b3JUeXBlIGJlZ2luLCBJdGVyYXRv
clR5cGUgZW5kKQotICAgIHsKLSAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAg
IGZvciAoSXRlcmF0b3JUeXBlIGl0ZXIgPSBiZWdpbjsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAg
ICAgICAgICAgIGNoYW5nZWQgfD0gYWRkKCppdGVyKS5pc05ld0VudHJ5OwotICAgICAgICByZXR1
cm4gY2hhbmdlZDsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
LCB0eXBlbmFtZSBWPgotICAgIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShp
dGVyYXRvciBpdCkKLSAgICB7Ci0gICAgICAgIGlmIChpdC5tX2ltcGwgPT0gbV9pbXBsLmVuZCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX2ltcGwuaW50ZXJuYWxDaGVj
a1RhYmxlQ29uc2lzdGVuY3koKTsKLSAgICAgICAgbV9pbXBsLnJlbW92ZVdpdGhvdXRFbnRyeUNv
bnNpc3RlbmN5Q2hlY2soaXQubV9pbXBsKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQor
ICAgIGJvb2wgYWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCk7CiAKLSAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGlu
ZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHJlbW92ZShmaW5kKHZhbHVlKSk7Ci0gICAgfQotCi0gICAg
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KKyAgICBib29sIHJl
bW92ZShjb25zdCBWYWx1ZVR5cGUmKTsKKyAgICBib29sIHJlbW92ZShpdGVyYXRvcik7CiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLSAgICBpbmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUs
IFY+OjpyZW1vdmVJZihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQotICAgIHsKLSAgICAgICAgbV9p
bXBsLnJlbW92ZUlmKGZ1bmN0b3IpOwotICAgIH0KLQotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgaW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6Y2xlYXIoKQotICAgIHsKLSAgICAgICAgbV9pbXBsLmNsZWFyKCk7IAotICAgIH0KLQotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgaW5saW5l
IGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZShpdGVyYXRvciBpdCkgLT4gVGFrZVR5cGUKLSAg
ICB7Ci0gICAgICAgIGlmIChpdCA9PSBlbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBWYWx1ZVRy
YWl0czo6dGFrZShWYWx1ZVRyYWl0czo6ZW1wdHlWYWx1ZSgpKTsKLQotICAgICAgICBhdXRvIHJl
c3VsdCA9IFZhbHVlVHJhaXRzOjp0YWtlKFdURk1vdmUoY29uc3RfY2FzdDxWYWx1ZVR5cGUmPigq
aXQpKSk7Ci0gICAgICAgIHJlbW92ZShpdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
fQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAg
ICBpbmxpbmUgYXV0byBIYXNoU2V0PFQsIFUsIFY+Ojp0YWtlKGNvbnN0IFZhbHVlVHlwZSYgdmFs
dWUpIC0+IFRha2VUeXBlCi0gICAgewotICAgICAgICByZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7
Ci0gICAgfQorICAgIHZvaWQgcmVtb3ZlSWYoY29uc3QgRnVuY3RvciYpOworICAgIHZvaWQgY2xl
YXIoKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci0gICAgaW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZUFueSgpIC0+IFRha2VUeXBl
Ci0gICAgewotICAgICAgICByZXR1cm4gdGFrZShiZWdpbigpKTsKLSAgICB9CisgICAgVGFrZVR5
cGUgdGFrZShjb25zdCBWYWx1ZVR5cGUmKTsKKyAgICBUYWtlVHlwZSB0YWtlKGl0ZXJhdG9yKTsK
KyAgICBUYWtlVHlwZSB0YWtlQW55KCk7CisKKyAgICAvLyBPdmVybG9hZHMgZm9yIHNtYXJ0IHBv
aW50ZXIgdmFsdWVzIHRoYXQgdGFrZSB0aGUgcmF3IHBvaW50ZXIgdHlwZSBhcyB0aGUgcGFyYW1l
dGVyLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5cGU+IHR5cGVuYW1lIHN0ZDo6
ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBpdGVyYXRvcj46OnR5cGUgZmluZCh0eXBl
bmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFYgPSBWYWx1ZVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46
OnZhbHVlLCBib29sPjo6dHlwZSBjb250YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0
clR5cGUpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5cGU+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZSByZW1v
dmUodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+
Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlIHRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQ
dHJUeXBlKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBIYXNoRnVu
Y3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVj4KLSAgICBp
bmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+OjpmaW5kKHR5
cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgY29uc3QgLT4gdHlwZW5hbWUg
c3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGl0ZXJhdG9yPjo6dHlwZQotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hTZXRUcmFuc2xhdG9y
PFRyYWl0cywgSGFzaEZ1bmN0aW9ucz4+KHZhbHVlKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci0gICAgaW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwg
SGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6Y29udGFpbnModHlwZW5hbWUgR2V0UHRySGVscGVyPFY+
OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0
UHRyPFY+Ojp2YWx1ZSwgYm9vbD46OnR5cGUKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2ltcGwu
dGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3I8VHJhaXRzLCBIYXNoRnVuY3Rpb25z
Pj4odmFsdWUpOwotICAgIH0KKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFs
dWVUeXBlJik7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1
bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFY+Ci0gICAg
aW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6cmVtb3Zl
KHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSB2YWx1ZSkgLT4gdHlwZW5hbWUgc3Rk
OjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6dmFsdWUsIGJvb2w+Ojp0eXBlCi0gICAgewotICAg
ICAgICByZXR1cm4gcmVtb3ZlKGZpbmQodmFsdWUpKTsKLSAgICB9CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPdGhlckNv
bGxlY3Rpb24mKSBjb25zdDsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxl
Y3Rpb24+CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYpIGNvbnN0
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMs
IHR5cGVuYW1lIFRyYWl0cz4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotICAgIGlubGluZSBh
dXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OnRha2UodHlwZW5hbWUg
R2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9p
ZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5cGU+Ojp0eXBlCi0gICAgewotICAgICAgICBy
ZXR1cm4gdGFrZShmaW5kKHZhbHVlKSk7Ci0gICAgfQorcHJpdmF0ZToKKyAgICBIYXNoVGFibGVU
eXBlIG1faW1wbDsKK307CisKK3N0cnVjdCBJZGVudGl0eUV4dHJhY3RvciB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RhdGljIGNvbnN0IFQmIGV4dHJhY3QoY29uc3QgVCYgdCkgeyByZXR1
cm4gdDsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUcmFpdHMsIHR5cGVuYW1lIEhh
c2hGdW5jdGlvbnM+CitzdHJ1Y3QgSGFzaFNldFRyYW5zbGF0b3IgeworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFQmIGtleSkgeyByZXR1cm4gSGFz
aEZ1bmN0aW9uczo6aGFzaChrZXkpOyB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVT4gc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVCYgYSwgY29uc3QgVSYgYikgeyByZXR1cm4g
SGFzaEZ1bmN0aW9uczo6ZXF1YWwoYSwgYik7IH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPiBzdGF0aWMgdm9pZCB0cmFuc2xhdGUoVCYgbG9jYXRpb24s
IFUmJiwgViYmIHZhbHVlKQorICAgIHsgCisgICAgICAgIFZhbHVlVHJhaXRzOjphc3NpZ25Ub0Vt
cHR5KGxvY2F0aW9uLCBzdGQ6OmZvcndhcmQ8Vj4odmFsdWUpKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUcmFuc2xhdG9yPgorc3RydWN0IEhhc2hTZXRUcmFuc2xhdG9yQWRhcHRl
ciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
VCYga2V5KSB7IHJldHVybiBUcmFuc2xhdG9yOjpoYXNoKGtleSk7IH0KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVPiBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUJiBhLCBjb25z
dCBVJiBiKSB7IHJldHVybiBUcmFuc2xhdG9yOjplcXVhbChhLCBiKTsgfQorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHN0YXRpYyB2b2lkIHRyYW5zbGF0ZShUJiBsb2NhdGlv
biwgY29uc3QgVSYga2V5LCBjb25zdCBVJiwgdW5zaWduZWQgaGFzaENvZGUpCisgICAgeworICAg
ICAgICBUcmFuc2xhdG9yOjp0cmFuc2xhdGUobG9jYXRpb24sIGtleSwgaGFzaENvZGUpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Citp
bmxpbmUgdm9pZCBIYXNoU2V0PFQsIFUsIFY+Ojpzd2FwKEhhc2hTZXQmIG90aGVyKQoreworICAg
IG1faW1wbC5zd2FwKG90aGVyLm1faW1wbCk7IAorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIHVuc2lnbmVkIEhhc2hTZXQ8VCwgVSwgVj46
OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBtX2ltcGwuc2l6ZSgpOyAKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSB1bnNpZ25lZCBI
YXNoU2V0PFQsIFUsIFY+OjpjYXBhY2l0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC5j
YXBhY2l0eSgpOyAKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5h
bWUgVj4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmlzRW1wdHkoKSBjb25zdAorewor
ICAgIHJldHVybiBtX2ltcGwuaXNFbXB0eSgpOyAKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwg
dHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmJl
Z2luKCkgY29uc3QgLT4gaXRlcmF0b3IKK3sKKyAgICByZXR1cm4gbV9pbXBsLmJlZ2luKCk7IAor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5l
IGF1dG8gSGFzaFNldDxULCBVLCBWPjo6ZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IKK3sKKyAgICBy
ZXR1cm4gbV9pbXBsLmVuZCgpOyAKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUg
VSwgdHlwZW5hbWUgVj4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmZpbmQoY29uc3Qg
VmFsdWVUeXBlJiB2YWx1ZSkgY29uc3QgLT4gaXRlcmF0b3IKK3sKKyAgICByZXR1cm4gbV9pbXBs
LmZpbmQodmFsdWUpOyAKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlw
ZW5hbWUgVj4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46OmNvbnRhaW5zKGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1wbC5jb250YWlucyh2YWx1
ZSk7IAorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9u
cywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgSGFzaFRyYW5zbGF0b3IsIHR5
cGVuYW1lIFQ+CitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFp
dHM+OjpmaW5kKGNvbnN0IFQmIHZhbHVlKSBjb25zdCAtPiBpdGVyYXRvcgoreworICAgIHJldHVy
biBtX2ltcGwudGVtcGxhdGUgZmluZDxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRyYW5z
bGF0b3I+Pih2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBI
YXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBUcmFpdHM+Cit0ZW1wbGF0ZTx0eXBlbmFtZSBIYXNoVHJh
bnNsYXRvciwgdHlwZW5hbWUgVD4KK2lubGluZSBib29sIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5j
dGlvbnMsIFRyYWl0cz46OmNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3JBZGFwdGVyPEhh
c2hUcmFuc2xhdG9yPj4odmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6YWRkKGNvbnN0
IFZhbHVlVHlwZSYgdmFsdWUpIC0+IEFkZFJlc3VsdAoreworICAgIHJldHVybiBtX2ltcGwuYWRk
KHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUg
Vj4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwgVj46OmFkZChWYWx1ZVR5cGUmJiB2YWx1ZSkg
LT4gQWRkUmVzdWx0Cit7CisgICAgcmV0dXJuIG1faW1wbC5hZGQoV1RGTW92ZSh2YWx1ZSkpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5l
IHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9pZChjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQor
eworICAgIG1faW1wbC5hZGQodmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkVm9p
ZChWYWx1ZVR5cGUmJiB2YWx1ZSkKK3sKKyAgICBtX2ltcGwuYWRkKFdURk1vdmUodmFsdWUpKTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVuYW1lIEhhc2hGdW5jdGlvbnMsIHR5
cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIEhhc2hUcmFuc2xhdG9yLCB0eXBlbmFt
ZSBUPgoraW5saW5lIGF1dG8gSGFzaFNldDxWYWx1ZSwgSGFzaEZ1bmN0aW9ucywgVHJhaXRzPjo6
YWRkKGNvbnN0IFQmIHZhbHVlKSAtPiBBZGRSZXN1bHQKK3sKKyAgICByZXR1cm4gbV9pbXBsLnRl
bXBsYXRlIGFkZFBhc3NpbmdIYXNoQ29kZTxIYXNoU2V0VHJhbnNsYXRvckFkYXB0ZXI8SGFzaFRy
YW5zbGF0b3I+Pih2YWx1ZSwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBl
bmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3JUeXBlPgoraW5s
aW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6YWRkKEl0ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0
b3JUeXBlIGVuZCkKK3sKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICBmb3IgKEl0ZXJh
dG9yVHlwZSBpdGVyID0gYmVnaW47IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGNoYW5n
ZWQgfD0gYWRkKCppdGVyKS5pc05ld0VudHJ5OworICAgIHJldHVybiBjaGFuZ2VkOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGJvb2wg
SGFzaFNldDxULCBVLCBWPjo6cmVtb3ZlKGl0ZXJhdG9yIGl0KQoreworICAgIGlmIChpdC5tX2lt
cGwgPT0gbV9pbXBsLmVuZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9pbXBsLmlu
dGVybmFsQ2hlY2tUYWJsZUNvbnNpc3RlbmN5KCk7CisgICAgbV9pbXBsLnJlbW92ZVdpdGhvdXRF
bnRyeUNvbnNpc3RlbmN5Q2hlY2soaXQubV9pbXBsKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBib29s
IEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZShjb25zdCBWYWx1ZVR5cGUmIHZhbHVlKQoreworICAg
IHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0
eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2lubGlu
ZSB2b2lkIEhhc2hTZXQ8VCwgVSwgVj46OnJlbW92ZUlmKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
Cit7CisgICAgbV9pbXBsLnJlbW92ZUlmKGZ1bmN0b3IpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIHZvaWQgSGFzaFNldDxULCBVLCBW
Pjo6Y2xlYXIoKQoreworICAgIG1faW1wbC5jbGVhcigpOyAKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VCwgVSwg
Vj46OnRha2UoaXRlcmF0b3IgaXQpIC0+IFRha2VUeXBlCit7CisgICAgaWYgKGl0ID09IGVuZCgp
KQorICAgICAgICByZXR1cm4gVmFsdWVUcmFpdHM6OnRha2UoVmFsdWVUcmFpdHM6OmVtcHR5VmFs
dWUoKSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IFZhbHVlVHJhaXRzOjp0YWtlKFdURk1vdmUoY29u
c3RfY2FzdDxWYWx1ZVR5cGUmPigqaXQpKSk7CisgICAgcmVtb3ZlKGl0KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBW
PgoraW5saW5lIGF1dG8gSGFzaFNldDxULCBVLCBWPjo6dGFrZShjb25zdCBWYWx1ZVR5cGUmIHZh
bHVlKSAtPiBUYWtlVHlwZQoreworICAgIHJldHVybiB0YWtlKGZpbmQodmFsdWUpKTsKK30KKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK2lubGluZSBhdXRv
IEhhc2hTZXQ8VCwgVSwgVj46OnRha2VBbnkoKSAtPiBUYWtlVHlwZQoreworICAgIHJldHVybiB0
YWtlKGJlZ2luKCkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFz
aEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8dHlwZW5hbWUgVj4KK2lubGlu
ZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRyYWl0cz46OmZpbmQodHlwZW5h
bWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVlKSBjb25zdCAtPiB0eXBlbmFtZSBzdGQ6
OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgaXRlcmF0b3I+Ojp0eXBlCit7CisgICAg
cmV0dXJuIG1faW1wbC50ZW1wbGF0ZSBmaW5kPEhhc2hTZXRUcmFuc2xhdG9yPFRyYWl0cywgSGFz
aEZ1bmN0aW9ucz4+KHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWUsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cz4KK3RlbXBsYXRlPHR5cGVuYW1lIFY+
CitpbmxpbmUgYXV0byBIYXNoU2V0PFZhbHVlLCBIYXNoRnVuY3Rpb25zLCBUcmFpdHM+Ojpjb250
YWlucyh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIGNvbnN0IC0+IHR5
cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlwZQor
eworICAgIHJldHVybiBtX2ltcGwudGVtcGxhdGUgY29udGFpbnM8SGFzaFNldFRyYW5zbGF0b3I8
VHJhaXRzLCBIYXNoRnVuY3Rpb25zPj4odmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVtcGxhdGU8
dHlwZW5hbWUgVj4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlvbnMsIFRy
YWl0cz46OnJlbW92ZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0clR5cGUgdmFsdWUpIC0+
IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBib29sPjo6dHlw
ZQoreworICAgIHJldHVybiByZW1vdmUoZmluZCh2YWx1ZSkpOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZSwgdHlwZW5hbWUgSGFzaEZ1bmN0aW9ucywgdHlwZW5hbWUgVHJhaXRzPgordGVt
cGxhdGU8dHlwZW5hbWUgVj4KK2lubGluZSBhdXRvIEhhc2hTZXQ8VmFsdWUsIEhhc2hGdW5jdGlv
bnMsIFRyYWl0cz46OnRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlIHZhbHVl
KSAtPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVGFrZVR5
cGU+Ojp0eXBlCit7CisgICAgcmV0dXJuIHRha2UoZmluZCh2YWx1ZSkpOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgoraW5saW5lIGJvb2wgSGFzaFNl
dDxULCBVLCBWPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYgdmFsdWUpCit7CisgICAg
aWYgKFZhbHVlVHJhaXRzOjppc0RlbGV0ZWRWYWx1ZSh2YWx1ZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+
Ci0gICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6aXNWYWxpZFZhbHVlKGNvbnN0IFZh
bHVlVHlwZSYgdmFsdWUpCi0gICAgewotICAgICAgICBpZiAoVmFsdWVUcmFpdHM6OmlzRGVsZXRl
ZFZhbHVlKHZhbHVlKSkKKyAgICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQpIHsKKyAgICAgICAgaWYgKHZhbHVlID09IFZhbHVlVHJhaXRzOjplbXB0eVZh
bHVlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8VmFsdWVUcmFpdHM+KHZhbHVlKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoSGFzaEZ1bmN0aW9uczo6c2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQpIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBWYWx1ZVRy
YWl0czo6ZW1wdHlWYWx1ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPFZhbHVl
VHJhaXRzPih2YWx1ZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNv
bGxlY3Rpb24+Ci0gICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShj
b25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKLSAgICB7Ci0gICAg
ICAgIGlmIChzaXplKCkgIT0gb3RoZXJDb2xsZWN0aW9uLnNpemUoKSkKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3Rl
bXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwg
VSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24p
IGNvbnN0Cit7CisgICAgaWYgKHNpemUoKSAhPSBvdGhlckNvbGxlY3Rpb24uc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChjb25zdCBhdXRvJiBvdGhlciA6IG90aGVyQ29s
bGVjdGlvbikgeworICAgICAgICBpZiAoIWNvbnRhaW5zKG90aGVyKSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvdGhlciA6IG90aGVyQ29sbGVj
dGlvbikgewotICAgICAgICAgICAgaWYgKCFjb250YWlucyhvdGhlcikpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0K
LSAgICAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KLSAgICBpbmxpbmUgYm9vbCBI
YXNoU2V0PFQsIFUsIFY+OjpvcGVyYXRvciE9KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJD
b2xsZWN0aW9uKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXJD
b2xsZWN0aW9uKTsKICAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIHZvaWQgSGFzaFNldDxULCBV
LCBWPjo6YWRkKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNv
bnN0IFZhbHVlVHlwZT4+IGxpc3QpCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDog
bGlzdCkKLSAgICAgICAgICAgIGFkZCh2YWx1ZSk7Ci0gICAgfQordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KK3RlbXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVj
dGlvbj4KK2lubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJhdG9yIT0oY29uc3QgT3Ro
ZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0Cit7CisgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXJDb2xsZWN0aW9uKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUgVSwgdHlwZW5hbWUgVj4KK3ZvaWQgSGFzaFNldDxULCBVLCBWPjo6YWRkKHN0ZDo6aW5pdGlh
bGl6ZXJfbGlzdDxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IFZhbHVlVHlwZT4+IGxpc3Qp
Cit7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IGxpc3QpCisgICAgICAgIGFkZCh2YWx1ZSk7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>
<flag name="review"
          id="343325"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>