<?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>155181</bug_id>
          
          <creation_ts>2016-03-08 11:58:13 -0800</creation_ts>
          <short_desc>Regexp matching should incur less call overhead</short_desc>
          <delta_ts>2016-03-08 13:15:12 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1172122</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 11:58:13 -0800</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172123</commentid>
    <comment_count>1</comment_count>
      <attachid>273310</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 11:58:42 -0800</bug_when>
    <thetext>Created attachment 273310
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172128</commentid>
    <comment_count>2</comment_count>
      <attachid>273313</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 12:14:22 -0800</bug_when>
    <thetext>Created attachment 273313
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172129</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-08 12:16:55 -0800</bug_when>
    <thetext>Attachment 273313 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/RegExpObjectInlines.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:186:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:187:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:199:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:200:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:201:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:203:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
Total errors found: 8 in 11 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>1172131</commentid>
    <comment_count>4</comment_count>
      <attachid>273313</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-08 12:18:25 -0800</bug_when>
    <thetext>Comment on attachment 273313
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172139</commentid>
    <comment_count>5</comment_count>
      <attachid>273316</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 12:32:38 -0800</bug_when>
    <thetext>Created attachment 273316
patch for landing

Includes a fix for one of the Mozilla tests.  It was a typo in handling lastIndex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1172143</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-08 12:34:55 -0800</bug_when>
    <thetext>Attachment 273316 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/RegExpObjectInlines.h:29:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:26:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:186:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:187:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:199:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:200:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:201:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/runtime/RegExpInlines.h:203:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
Total errors found: 8 in 11 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>1172161</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-08 13:15:12 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/197796</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273310</attachid>
            <date>2016-03-08 11:58:42 -0800</date>
            <delta_ts>2016-03-08 12:14:22 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>39144</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTc3ODEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDg2LDYgKzQ4Niw4IEBACiAJCTBGN0IyOTRCMTRDM0NE
MkYwMDdDM0RCMSAvKiBERkdDYXBhYmlsaXRpZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRDgyRTFGMTQxNzJDMkYwMDE3OUM5NCAvKiBERkdDYXBh
YmlsaXRpZXMuaCAqLzsgfTsKIAkJMEY3QjI5NEQxNEMzQ0Q0QzAwN0MzREIxIC8qIERGR0NvbW1v
bi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3
N0UxNDY5RUJDNDAwQ0YyNDQyIC8qIERGR0NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBD
b3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3QzExQUMxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY3QzM5RkIxQzhGNjI5MzAw
NDgwMTUxIC8qIFJlZ0V4cElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGN0MzOUZBMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVz
LmggKi87IH07CisJCTBGN0MzOUZEMUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJbmxp
bmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdD
MzlGQzFDOEY2NTk1MDA0ODAxNTEgLyogUmVnRXhwT2JqZWN0SW5saW5lcy5oICovOyB9OwogCQkw
RjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUgLyog
QnlWYWxJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY4MzM1QjcxNjM5QzFFNjAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1
QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICovOyB9Owog
CQkwRjgzMzVCODE2MzlDMUVBMDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MzM1QjUxNjM5
QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjYzNyw2ICsyNjM5LDggQEAKIAkJ
MEY3OTA4NTMxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR1N0cnVjdHVyZVJl
Z2lzdHJhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25Q
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzkwODU0MTlBMjkwQjIw
MEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5oOyBwYXRo
ID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGN0MxMUFDMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb3B5QmFycmllci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjdDMzlGQTFDOEY2MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdFeHBJbmxpbmVzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGN0MzOUZDMUM4RjY1OTUwMDQ4MDE1MSAv
KiBSZWdFeHBPYmplY3RJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFJlZ0V4cE9iamVjdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4
MDIzRTkxNjEzODMyMzAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBCeVZhbEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4MzM1QjQxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlvblByb2ZpbGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODMzNUI1MTYzOUMxRTMwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEFycmF5QWxsb2NhdGlvblByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTU4NzksMTEgKzU4ODMsMTMgQEAKIAkJCQk4NkY3NUVGQzE1MUMwNjJGMDA3QzlC
QTMgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmggKi8sCiAJCQkJQkNEMjAyQkQwRTE3MDZBNzAwMkM3
RTgyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCAqLywKIAkJCQlCQ0QyMDJCRTBFMTcwNkE3MDAy
QzdFODIgLyogUmVnRXhwQ29uc3RydWN0b3IuaCAqLywKKwkJCQkwRjdDMzlGQTFDOEY2MjkzMDA0
ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oICovLAogCQkJCUExNzEyQjQwMTFDN0IyMzUwMDdBNTMx
NSAvKiBSZWdFeHBLZXkuaCAqLywKIAkJCQk4NkY3NUVGRDE1MUMwNjJGMDA3QzlCQTMgLyogUmVn
RXhwTWF0Y2hlc0FycmF5LmNwcCAqLywKIAkJCQk5M0NFRERGQjBFQTkxRUU2MDAyNThFQkUgLyog
UmVnRXhwTWF0Y2hlc0FycmF5LmggKi8sCiAJCQkJRjY5MkE4N0IwMjU1NTk3RDAxRkY2MEY3IC8q
IFJlZ0V4cE9iamVjdC5jcHAgKi8sCiAJCQkJRjY5MkE4N0MwMjU1NTk3RDAxRkY2MEY3IC8qIFJl
Z0V4cE9iamVjdC5oICovLAorCQkJCTBGN0MzOUZDMUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBP
YmplY3RJbmxpbmVzLmggKi8sCiAJCQkJQkNEMjAyQkYwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4
cFByb3RvdHlwZS5jcHAgKi8sCiAJCQkJQkNEMjAyQzAwRTE3MDZBNzAwMkM3RTgyIC8qIFJlZ0V4
cFByb3RvdHlwZS5oICovLAogCQkJCTBGQjdGMzkxMTVFRDhFMzgwMEYxNjdCMiAvKiBSZWplY3Qu
aCAqLywKQEAgLTcyMTEsNiArNzIxNyw3IEBACiAJCQkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkRE
IC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NTE3OTczOEI4
MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JG
RjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY3QzM5RkIxQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdGaXh1
cFBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlEMzM5NzE3RkZDNEU2MDA3M0MyQkMgLyog
REZHRmx1c2hlZEF0LmggaW4gSGVhZGVycyAqLywKQEAgLTc5MzAsNiArNzkzNyw3IEBACiAJCQkJ
QTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGN0MzOUZEMUM4RjY1OTUwMDQ4MDE1MSAvKiBSZWdFeHBPYmplY3RJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyog
U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4
NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2
RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MjQsNyArNjI0LDcgQEAgRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAg
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBhcmd1bWVudCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhw
T2JqZWN0LT5leGVjSW5saW5lKGV4ZWMsIGdsb2JhbE9iamVjdCwgYXJndW1lbnQpKTsKIH0KICAg
ICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWMo
RXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBSZWdFeHBPYmpl
Y3QqIHJlZ0V4cE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEFyZ3VtZW50KQpAQCAtNjM3
LDcgKzYzNyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmUKICAg
ICBKU1N0cmluZyogaW5wdXQgPSBhcmd1bWVudC50b1N0cmluZ09yTnVsbChleGVjKTsKICAgICBp
ZiAoIWlucHV0KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhwT2JqZWN0LT5leGVjKGV4ZWMsIGds
b2JhbE9iamVjdCwgaW5wdXQpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlZ0V4cE9i
amVjdC0+ZXhlY0lubGluZShleGVjLCBnbG9iYWxPYmplY3QsIGlucHV0KSk7CiB9CiAgICAgICAg
IAogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVjR2VuZXJp
YyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCkBAIC02
NjIsNyArNjYyLDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAog
ICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFj
ZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAKLSAgICByZXR1cm4gcmVnRXhwT2JqZWN0LT50ZXN0KGV4
ZWMsIGdsb2JhbE9iamVjdCwgaW5wdXQpOworICAgIHJldHVybiByZWdFeHBPYmplY3QtPnRlc3RJ
bmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1dCk7CiB9CiAKIHNpemVfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZEFyZ3VtZW50KQpAQCAtNjc1LDcgKzY3NSw3IEBAIHNpemVfdCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblJlZ0V4cFRlc3QKICAgICBKU1N0cmluZyogaW5wdXQgPSBhcmd1bWVudC50b1N0
cmluZ09yTnVsbChleGVjKTsKICAgICBpZiAoIWlucHV0KQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIHJlZ0V4cE9iamVjdC0+dGVzdChleGVjLCBnbG9iYWxPYmplY3QsIGlucHV0
KTsKKyAgICByZXR1cm4gcmVnRXhwT2JqZWN0LT50ZXN0SW5saW5lKGV4ZWMsIGdsb2JhbE9iamVj
dCwgaW5wdXQpOwogfQogCiBzaXplX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0
R2VuZXJpYyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHJldmlzaW9u
IDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0y
MDAxLCAyMDA0IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCi0gKiAgQ29weXJpZ2h0IChj
KSAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKGMpIDIwMDcsIDIwMDgsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICogIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUsIEluYy4KICAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgUGV0ZXIgVmFyZ2EgKHB2YXJnYUBpbmYudS1zemVnZWQuaHUpLCBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAogICoKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJMZXhlci5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJSZWdFeHBDYWNoZS5oIgorI2luY2x1ZGUg
IlJlZ0V4cElubGluZXMuaCIKICNpbmNsdWRlICJZYXJyLmgiCiAjaW5jbHVkZSAiWWFyckpJVC5o
IgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0zMjAsODkgKzMyMSw5IEBAIHZvaWQg
UmVnRXhwOjpjb21waWxlKFZNKiB2bSwgWWFycjo6WWFyckMKICAgICBtX3JlZ0V4cEJ5dGVjb2Rl
ID0gWWFycjo6Ynl0ZUNvbXBpbGUocGF0dGVybiwgJnZtLT5tX3JlZ0V4cEFsbG9jYXRvcik7CiB9
CiAKLXZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnkoVk0mIHZtLCBZYXJyOjpZYXJyQ2hh
clNpemUgY2hhclNpemUpCi17Ci0gICAgaWYgKGhhc0NvZGUoKSkgewotI2lmIEVOQUJMRShZQVJS
X0pJVCkKLSAgICAgICAgaWYgKG1fc3RhdGUgIT0gSklUQ29kZSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKChjaGFyU2l6ZSA9PSBZYXJyOjpDaGFyOCkgJiYgKG1fcmVnRXhwSklU
Q29kZS5oYXM4Qml0Q29kZSgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKChj
aGFyU2l6ZSA9PSBZYXJyOjpDaGFyMTYpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzMTZCaXRDb2Rl
KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuOwotI2VuZGlm
Ci0gICAgfQotCi0gICAgY29tcGlsZSgmdm0sIGNoYXJTaXplKTsKLX0KLQogaW50IFJlZ0V4cDo6
bWF0Y2goVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0
b3I8aW50LCAzMj4mIG92ZWN0b3IpCiB7Ci0jaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAg
IG1fcnRNYXRjaENhbGxDb3VudCsrOwotICAgIG1fcnRNYXRjaFRvdGFsU3ViamVjdFN0cmluZ0xl
biArPSAoZG91YmxlKShzLmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwotI2VuZGlmCi0KLSAgICBB
U1NFUlQobV9zdGF0ZSAhPSBQYXJzZUVycm9yKTsKLSAgICBjb21waWxlSWZOZWNlc3Nhcnkodm0s
IHMuaXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7Ci0KLSAgICBpbnQgb2Zm
c2V0VmVjdG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAyOwotICAgIG92ZWN0b3Iu
cmVzaXplKG9mZnNldFZlY3RvclNpemUpOwotICAgIGludCogb2Zmc2V0VmVjdG9yID0gb3ZlY3Rv
ci5kYXRhKCk7Ci0KLSAgICBpbnQgcmVzdWx0OwotI2lmIEVOQUJMRShZQVJSX0pJVCkKLSAgICBp
ZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7Ci0gICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAg
ICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBz
dGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKS5zdGFydDsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0
ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3Rvcikuc3RhcnQ7Ci0j
aWYgRU5BQkxFKFlBUlJfSklUX0RFQlVHKQotICAgICAgICBtYXRjaENvbXBhcmVXaXRoSW50ZXJw
cmV0ZXIocywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKLSNlbmRpZgotICAg
IH0gZWxzZQotI2VuZGlmCi0gICAgICAgIHJlc3VsdCA9IFlhcnI6OmludGVycHJldChtX3JlZ0V4
cEJ5dGVjb2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCo+KG9mZnNldFZlY3RvcikpOwotCi0gICAgLy8gRklYTUU6IFRoZSBZQVJSIGVuZ2luZSBzaG91
bGQgaGFuZGxlIHVuc2lnbmVkIG9yIHNpemVfdCBsZW5ndGggbWF0Y2hlcy4KLSAgICAvLyBUaGUg
WUFSUiBJbnRlcnByZXRlciBpcyAidW5zaWduZWQiIGNsZWFuLCB3aGlsZSB0aGUgWUFSUiBKSVQg
aGFzbid0IGJlZW4gYWRkcmVzc2VkLgotICAgIC8vIFRoZSBvZmZzZXQgdmVjdG9yIGhhbmRsaW5n
IG5lZWRzIHRvIGNoYW5nZSBhcyB3ZWxsLgotICAgIC8vIFJpZ2h0IG5vdyB3ZSBjb252ZXJ0IGEg
bWF0Y2ggd2hlcmUgdGhlIG9mZnNldHMgb3ZlcmZsb3dlZCBpbnRvIG1hdGNoIGZhaWx1cmUuCi0g
ICAgLy8gVGhlcmUgYXJlIHR3byBwbGFjZXMgaW4gV2ViQ29yZSB0aGF0IGNhbGwgdGhlIGludGVy
cHJldGVyIGRpcmVjdGx5IHRoYXQgbmVlZCB0bwotICAgIC8vIGhhdmUgdGhlaXIgb2Zmc2V0cyBj
aGFuZ2VkIHRvIGludCBhcyB3ZWxsLiBUaGV5IGFyZSB5YXJyL1JlZ3VsYXJFeHByZXNzaW9uLmNw
cAotICAgIC8vIGFuZCBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKLSAgICBp
ZiAocy5sZW5ndGgoKSA+IElOVF9NQVgpIHsKLSAgICAgICAgYm9vbCBvdmVyZmxvd2VkID0gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA8IC0xKQotICAgICAgICAgICAgb3ZlcmZsb3dlZCA9
IHRydWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBtX251bVN1YnBhdHRl
cm5zOyBpKyspIHsKLSAgICAgICAgICAgIGlmICgob2Zmc2V0VmVjdG9yW2kqMl0gPCAtMSkgfHwg
KChvZmZzZXRWZWN0b3JbaSoyXSA+PSAwKSAmJiAob2Zmc2V0VmVjdG9yW2kqMisxXSA8IC0xKSkp
IHsKLSAgICAgICAgICAgICAgICBvdmVyZmxvd2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBv
ZmZzZXRWZWN0b3JbaSoyXSA9IC0xOwotICAgICAgICAgICAgICAgIG9mZnNldFZlY3RvcltpKjIr
MV0gPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvdmVyZmxv
d2VkKQotICAgICAgICAgICAgcmVzdWx0ID0gLTE7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3Vs
dCA+PSAtMSk7Ci0KLSNpZiBSRUdFWFBfRlVOQ19URVNUX0RBVEFfR0VOCi0gICAgUmVnRXhwRnVu
Y3Rpb25hbFRlc3RDb2xsZWN0b3I6OmdldCgpLT5vdXRwdXRPbmVUZXN0KHRoaXMsIHMsIHN0YXJ0
T2Zmc2V0LCBvZmZzZXRWZWN0b3IsIHJlc3VsdCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSRUdF
WFBfVFJBQ0lORykKLSAgICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAgICBtX3J0TWF0Y2hGb3Vu
ZENvdW50Kys7Ci0jZW5kaWYKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1hdGNo
SW5saW5lKHZtLCBzLCBzdGFydE9mZnNldCwgb3ZlY3Rvcik7CiB9CiAKIHZvaWQgUmVnRXhwOjpj
b21waWxlTWF0Y2hPbmx5KFZNKiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQpAQCAt
NDM5LDY1ICszNjAsOSBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShWTSogdm0sIFlh
CiAgICAgbV9yZWdFeHBCeXRlY29kZSA9IFlhcnI6OmJ5dGVDb21waWxlKHBhdHRlcm4sICZ2bS0+
bV9yZWdFeHBBbGxvY2F0b3IpOwogfQogCi12b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5
TWF0Y2hPbmx5KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQotewotICAgIGlm
IChoYXNDb2RlKCkpIHsKLSNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgICAgIGlmIChtX3N0YXRl
ICE9IEpJVENvZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgoY2hhclNpemUg
PT0gWWFycjo6Q2hhcjgpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzOEJpdENvZGVNYXRjaE9ubHko
KSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6
Q2hhcjE2KSAmJiAobV9yZWdFeHBKSVRDb2RlLmhhczE2Qml0Q29kZU1hdGNoT25seSgpKSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIH0K
LQotICAgIGNvbXBpbGVNYXRjaE9ubHkoJnZtLCBjaGFyU2l6ZSk7Ci19Ci0KIE1hdGNoUmVzdWx0
IFJlZ0V4cDo6bWF0Y2goVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0KQogewotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBtX3J0TWF0Y2hPbmx5Q2Fs
bENvdW50Kys7Ci0gICAgbV9ydE1hdGNoT25seVRvdGFsU3ViamVjdFN0cmluZ0xlbiArPSAoZG91
YmxlKShzLmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwotI2VuZGlmCi0KLSAgICBBU1NFUlQobV9z
dGF0ZSAhPSBQYXJzZUVycm9yKTsKLSAgICBjb21waWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkodm0s
IHMuaXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7Ci0KLSNpZiBFTkFCTEUo
WUFSUl9KSVQpCi0gICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewotICAgICAgICBNYXRjaFJl
c3VsdCByZXN1bHQgPSBzLmlzOEJpdCgpID8KLSAgICAgICAgICAgIG1fcmVnRXhwSklUQ29kZS5l
eGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkpIDoKLSAgICAg
ICAgICAgIG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zm
c2V0LCBzLmxlbmd0aCgpKTsKLSNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgICAgIGlm
ICghcmVzdWx0KQotICAgICAgICAgICAgbV9ydE1hdGNoT25seUZvdW5kQ291bnQrKzsKLSNlbmRp
ZgotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG9mZnNl
dFZlY3RvclNpemUgPSAobV9udW1TdWJwYXR0ZXJucyArIDEpICogMjsKLSAgICBpbnQqIG9mZnNl
dFZlY3RvcjsKLSAgICBWZWN0b3I8aW50LCAzMj4gbm9uUmV0dXJuZWRPdmVjdG9yOwotICAgIG5v
blJldHVybmVkT3ZlY3Rvci5yZXNpemUob2Zmc2V0VmVjdG9yU2l6ZSk7Ci0gICAgb2Zmc2V0VmVj
dG9yID0gbm9uUmV0dXJuZWRPdmVjdG9yLmRhdGEoKTsKLSAgICBpbnQgciA9IFlhcnI6OmludGVy
cHJldChtX3JlZ0V4cEJ5dGVjb2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwgcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCo+KG9mZnNldFZlY3RvcikpOwotI2lmIFJFR0VYUF9GVU5DX1RFU1RfREFU
QV9HRU4KLSAgICBSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6Z2V0KCktPm91dHB1dE9u
ZVRlc3QodGhpcywgcywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKLSNlbmRp
ZgotCi0gICAgaWYgKHIgPj0gMCkgewotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICAg
ICAgbV9ydE1hdGNoT25seUZvdW5kQ291bnQrKzsKLSNlbmRpZgotICAgICAgICByZXR1cm4gTWF0
Y2hSZXN1bHQociwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG9mZnNldFZlY3RvcilbMV0p
OwotICAgIH0KLQotICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbGVkKCk7CisgICAgcmV0dXJu
IG1hdGNoSW5saW5lKHZtLCBzLCBzdGFydE9mZnNldCk7CiB9CiAKIHZvaWQgUmVnRXhwOjpkZWxl
dGVDb2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZp
c2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5
LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCkBAIC02NCw2ICs2NCwxMSBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBpbnQgbWF0Y2goVk0mLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVj
dG9yPGludCwgMzI+JiBvdmVjdG9yKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBNYXRjaFJlc3Vs
dCBtYXRjaChWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KTsKKworICAg
IC8vIENhbGwgdGhlc2UgdmVyc2lvbnMgb2YgdGhlIG1hdGNoIGZ1bmN0aW9ucyBpZiB5b3UncmUg
ZGVzcGVyYXRlIGZvciBwZXJmb3JtYW5jZS4KKyAgICBpbnQgbWF0Y2hJbmxpbmUoVk0mLCBjb25z
dCBTdHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yPGludCwgMzI+JiBvdmVjdG9y
KTsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaElubGluZShWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0KTsKKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWJwYXR0ZXJucygpIGNv
bnN0IHsgcmV0dXJuIG1fbnVtU3VicGF0dGVybnM7IH0KIAogICAgIGJvb2wgaGFzQ29kZSgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMTk5OS0yMDAxLCAyMDA0IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29w
eXJpZ2h0IChjKSAyMDA3LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEwIFBldGVyIFZhcmdhIChwdmFyZ2FAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVy
c2l0eSBvZiBTemVnZWQKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZu
ZGVmIFJlZ0V4cElubGluZXNfaAorI2RlZmluZSBSZWdFeHBJbmxpbmVzX2gKKworI2luY2x1ZGUg
IlJlZ0V4cC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJZYXJyLmgiCisj
aW5jbHVkZSAiWWFyckpJVC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElORSB2
b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXpl
IGNoYXJTaXplKQoreworICAgIGlmIChoYXNDb2RlKCkpIHsKKyNpZiBFTkFCTEUoWUFSUl9KSVQp
CisgICAgICAgIGlmIChtX3N0YXRlICE9IEpJVENvZGUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6Q2hhcjgpICYmIChtX3JlZ0V4cEpJVENvZGUu
aGFzOEJpdENvZGUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgoY2hhclNp
emUgPT0gWWFycjo6Q2hhcjE2KSAmJiAobV9yZWdFeHBKSVRDb2RlLmhhczE2Qml0Q29kZSgpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyNlbHNlCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAg
IH0KKworICAgIGNvbXBpbGUoJnZtLCBjaGFyU2l6ZSk7Cit9CisKK0FMV0FZU19JTkxJTkUgaW50
IFJlZ0V4cDo6bWF0Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBWZWN0b3I8aW50LCAzMj4mIG92ZWN0b3IpCit7CisjaWYgRU5BQkxFKFJFR0VY
UF9UUkFDSU5HKQorICAgIG1fcnRNYXRjaENhbGxDb3VudCsrOworICAgIG1fcnRNYXRjaFRvdGFs
U3ViamVjdFN0cmluZ0xlbiArPSAoZG91YmxlKShzLmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwor
I2VuZGlmCisKKyAgICBBU1NFUlQobV9zdGF0ZSAhPSBQYXJzZUVycm9yKTsKKyAgICBjb21waWxl
SWZOZWNlc3Nhcnkodm0sIHMuaXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7
CisKKyAgICBpbnQgb2Zmc2V0VmVjdG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAy
OworICAgIG92ZWN0b3IucmVzaXplKG9mZnNldFZlY3RvclNpemUpOworICAgIGludCogb2Zmc2V0
VmVjdG9yID0gb3ZlY3Rvci5kYXRhKCk7CisKKyAgICBpbnQgcmVzdWx0OworI2lmIEVOQUJMRShZ
QVJSX0pJVCkKKyAgICBpZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7CisgICAgICAgIGlmIChzLmlz
OEJpdCgpKQorICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5j
aGFyYWN0ZXJzOCgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKS5zdGFy
dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4
ZWN1dGUocy5jaGFyYWN0ZXJzMTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZl
Y3Rvcikuc3RhcnQ7CisjaWYgRU5BQkxFKFlBUlJfSklUX0RFQlVHKQorICAgICAgICBtYXRjaENv
bXBhcmVXaXRoSW50ZXJwcmV0ZXIocywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0
KTsKKyNlbmRpZgorICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgIHJlc3VsdCA9IFlhcnI6Omlu
dGVycHJldChtX3JlZ0V4cEJ5dGVjb2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwgcmVpbnRlcnBy
ZXRfY2FzdDx1bnNpZ25lZCo+KG9mZnNldFZlY3RvcikpOworCisgICAgLy8gRklYTUU6IFRoZSBZ
QVJSIGVuZ2luZSBzaG91bGQgaGFuZGxlIHVuc2lnbmVkIG9yIHNpemVfdCBsZW5ndGggbWF0Y2hl
cy4KKyAgICAvLyBUaGUgWUFSUiBJbnRlcnByZXRlciBpcyAidW5zaWduZWQiIGNsZWFuLCB3aGls
ZSB0aGUgWUFSUiBKSVQgaGFzbid0IGJlZW4gYWRkcmVzc2VkLgorICAgIC8vIFRoZSBvZmZzZXQg
dmVjdG9yIGhhbmRsaW5nIG5lZWRzIHRvIGNoYW5nZSBhcyB3ZWxsLgorICAgIC8vIFJpZ2h0IG5v
dyB3ZSBjb252ZXJ0IGEgbWF0Y2ggd2hlcmUgdGhlIG9mZnNldHMgb3ZlcmZsb3dlZCBpbnRvIG1h
dGNoIGZhaWx1cmUuCisgICAgLy8gVGhlcmUgYXJlIHR3byBwbGFjZXMgaW4gV2ViQ29yZSB0aGF0
IGNhbGwgdGhlIGludGVycHJldGVyIGRpcmVjdGx5IHRoYXQgbmVlZCB0bworICAgIC8vIGhhdmUg
dGhlaXIgb2Zmc2V0cyBjaGFuZ2VkIHRvIGludCBhcyB3ZWxsLiBUaGV5IGFyZSB5YXJyL1JlZ3Vs
YXJFeHByZXNzaW9uLmNwcAorICAgIC8vIGFuZCBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxp
dGllcy5jcHAKKyAgICBpZiAocy5sZW5ndGgoKSA+IElOVF9NQVgpIHsKKyAgICAgICAgYm9vbCBv
dmVyZmxvd2VkID0gZmFsc2U7CisKKyAgICAgICAgaWYgKHJlc3VsdCA8IC0xKQorICAgICAgICAg
ICAgb3ZlcmZsb3dlZCA9IHRydWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
PSBtX251bVN1YnBhdHRlcm5zOyBpKyspIHsKKyAgICAgICAgICAgIGlmICgob2Zmc2V0VmVjdG9y
W2kqMl0gPCAtMSkgfHwgKChvZmZzZXRWZWN0b3JbaSoyXSA+PSAwKSAmJiAob2Zmc2V0VmVjdG9y
W2kqMisxXSA8IC0xKSkpIHsKKyAgICAgICAgICAgICAgICBvdmVyZmxvd2VkID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICBvZmZzZXRWZWN0b3JbaSoyXSA9IC0xOworICAgICAgICAgICAgICAgIG9m
ZnNldFZlY3RvcltpKjIrMV0gPSAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChvdmVyZmxvd2VkKQorICAgICAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgfQorCisg
ICAgQVNTRVJUKHJlc3VsdCA+PSAtMSk7CisKKyNpZiBSRUdFWFBfRlVOQ19URVNUX0RBVEFfR0VO
CisgICAgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3I6OmdldCgpLT5vdXRwdXRPbmVUZXN0
KHRoaXMsIHMsIHN0YXJ0T2Zmc2V0LCBvZmZzZXRWZWN0b3IsIHJlc3VsdCk7CisjZW5kaWYKKwor
I2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKKyAgICBpZiAocmVzdWx0ICE9IC0xKQorICAgICAg
ICBtX3J0TWF0Y2hGb3VuZENvdW50Kys7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0FMV0FZU19JTkxJTkUgdm9pZCBSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeU1hdGNoT25s
eShWTSYgdm0sIFlhcnI6OllhcnJDaGFyU2l6ZSBjaGFyU2l6ZSkKK3sKKyAgICBpZiAoaGFzQ29k
ZSgpKSB7CisjaWYgRU5BQkxFKFlBUlJfSklUKQorICAgICAgICBpZiAobV9zdGF0ZSAhPSBKSVRD
b2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoKGNoYXJTaXplID09IFlhcnI6
OkNoYXI4KSAmJiAobV9yZWdFeHBKSVRDb2RlLmhhczhCaXRDb2RlTWF0Y2hPbmx5KCkpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoKGNoYXJTaXplID09IFlhcnI6OkNoYXIxNikg
JiYgKG1fcmVnRXhwSklUQ29kZS5oYXMxNkJpdENvZGVNYXRjaE9ubHkoKSkpCisgICAgICAgICAg
ICByZXR1cm47CisjZWxzZQorICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICB9CisKKyAgICBj
b21waWxlTWF0Y2hPbmx5KCZ2bSwgY2hhclNpemUpOworfQorCitBTFdBWVNfSU5MSU5FIE1hdGNo
UmVzdWx0IFJlZ0V4cDo6bWF0Y2hJbmxpbmUoVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0KQoreworI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKKyAgICBtX3J0
TWF0Y2hPbmx5Q2FsbENvdW50Kys7CisgICAgbV9ydE1hdGNoT25seVRvdGFsU3ViamVjdFN0cmlu
Z0xlbiArPSAoZG91YmxlKShzLmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOworI2VuZGlmCisKKyAg
ICBBU1NFUlQobV9zdGF0ZSAhPSBQYXJzZUVycm9yKTsKKyAgICBjb21waWxlSWZOZWNlc3NhcnlN
YXRjaE9ubHkodm0sIHMuaXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7CisK
KyNpZiBFTkFCTEUoWUFSUl9KSVQpCisgICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgeworICAg
ICAgICBNYXRjaFJlc3VsdCByZXN1bHQgPSBzLmlzOEJpdCgpID8KKyAgICAgICAgICAgIG1fcmVn
RXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3Ro
KCkpIDoKKyAgICAgICAgICAgIG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFjdGVyczE2
KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpKTsKKyNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcp
CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgbV9ydE1hdGNoT25seUZvdW5kQ291
bnQrKzsKKyNlbmRpZgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZgorCisg
ICAgaW50IG9mZnNldFZlY3RvclNpemUgPSAobV9udW1TdWJwYXR0ZXJucyArIDEpICogMjsKKyAg
ICBpbnQqIG9mZnNldFZlY3RvcjsKKyAgICBWZWN0b3I8aW50LCAzMj4gbm9uUmV0dXJuZWRPdmVj
dG9yOworICAgIG5vblJldHVybmVkT3ZlY3Rvci5yZXNpemUob2Zmc2V0VmVjdG9yU2l6ZSk7Cisg
ICAgb2Zmc2V0VmVjdG9yID0gbm9uUmV0dXJuZWRPdmVjdG9yLmRhdGEoKTsKKyAgICBpbnQgciA9
IFlhcnI6OmludGVycHJldChtX3JlZ0V4cEJ5dGVjb2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG9mZnNldFZlY3RvcikpOworI2lmIFJFR0VYUF9G
VU5DX1RFU1RfREFUQV9HRU4KKyAgICBSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6Z2V0
KCktPm91dHB1dE9uZVRlc3QodGhpcywgcywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVz
dWx0KTsKKyNlbmRpZgorCisgICAgaWYgKHIgPj0gMCkgeworI2lmIEVOQUJMRShSRUdFWFBfVFJB
Q0lORykKKyAgICAgICAgbV9ydE1hdGNoT25seUZvdW5kQ291bnQrKzsKKyNlbmRpZgorICAgICAg
ICByZXR1cm4gTWF0Y2hSZXN1bHQociwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG9mZnNl
dFZlY3RvcilbMV0pOworICAgIH0KKworICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbGVkKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVnRXhwSW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0
Y2hlc0FycmF5LmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsOTAg
KzI2LDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJy
YXkuaCIKIAotI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKLSNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCi0KIG5hbWVzcGFjZSBKU0MgewogCi1zdGF0aWMgY29uc3QgUHJvcGVydHlPZmZzZXQg
aW5kZXhQcm9wZXJ0eU9mZnNldCA9IDEwMDsKLXN0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCBp
bnB1dFByb3BlcnR5T2Zmc2V0ID0gMTAxOwotCi1zdGF0aWMgSlNBcnJheSogdHJ5Q3JlYXRlVW5p
bml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCB1bnNpZ25lZCBpbml0aWFsTGVuZ3RoKQotewotICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9
IHN0ZDo6bWF4KEJBU0VfVkVDVE9SX0xFTiwgaW5pdGlhbExlbmd0aCk7Ci0gICAgaWYgKHZlY3Rv
ckxlbmd0aCA+IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgdm9pZCogdGVtcDsKLSAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAs
IEJ1dHRlcmZseTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwg
dHJ1ZSwgdmVjdG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZy
b21CYXNlKHRlbXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7Ci0gICAgYnV0
dGVyZmx5LT5zZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKLSAgICBidXR0ZXJmbHktPnNl
dFB1YmxpY0xlbmd0aChpbml0aWFsTGVuZ3RoKTsKLQotICAgIHJldHVybiBKU0FycmF5OjpjcmVh
dGVXaXRoQnV0dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7Ci19Ci0KLUpTQXJyYXkq
IGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheSgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBpbnB1dCwgUmVnRXhwKiByZWdFeHAsCi0g
ICAgdW5zaWduZWQgc3RhcnRPZmZzZXQsIE1hdGNoUmVzdWx0JiByZXN1bHQpCi17Ci0gICAgU2Ft
cGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oImNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheSIpOwot
ICAgIAotICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKLSAgICAKLSAgICBWZWN0b3I8
aW50LCAzMj4gc3VicGF0dGVyblJlc3VsdHM7Ci0gICAgaW50IHBvc2l0aW9uID0gcmVnRXhwLT5t
YXRjaCh2bSwgaW5wdXQtPnZhbHVlKGV4ZWMpLCBzdGFydE9mZnNldCwgc3VicGF0dGVyblJlc3Vs
dHMpOwotICAgIGlmIChwb3NpdGlvbiA9PSAtMSkgewotICAgICAgICByZXN1bHQgPSBNYXRjaFJl
c3VsdDo6ZmFpbGVkKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJl
c3VsdC5zdGFydCA9IHBvc2l0aW9uOwotICAgIHJlc3VsdC5lbmQgPSBzdWJwYXR0ZXJuUmVzdWx0
c1sxXTsKLSAgICAKLSAgICBKU0FycmF5KiBhcnJheTsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNo
b3VsZCBoYW5kbGUgYXJyYXkgYWxsb2NhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseS4KLSAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ0Ci0gICAgCi0gICAg
aWYgKFVOTElLRUxZKGdsb2JhbE9iamVjdC0+aXNIYXZpbmdBQmFkVGltZSgpKSkgewotICAgICAg
ICBhcnJheSA9IEpTQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVj
dC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMo
KSArIDEpOwotICAgICAgICAKLSAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwg
anNTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5k
IC0gcmVzdWx0LnN0YXJ0KSk7Ci0gICAgICAgIAotICAgICAgICBpZiAodW5zaWduZWQgbnVtU3Vi
cGF0dGVybnMgPSByZWdFeHAtPm51bVN1YnBhdHRlcm5zKCkpIHsKLSAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPD0gbnVtU3VicGF0dGVybnM7ICsraSkgewotICAgICAgICAgICAg
ICAgIGludCBzdGFydCA9IHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpXTsKLSAgICAgICAgICAgICAg
ICBpZiAoc3RhcnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJ
bmRleCh2bSwgaSwgSlNSb3BlU3RyaW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBp
bnB1dCwgc3RhcnQsIHN1YnBhdHRlcm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCkpOwotICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJ
bmRleCh2bSwgaSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9IGVsc2UgewotICAgICAgICBhcnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBN
YXRjaGVzQXJyYXkodm0sIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJl
KCksIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOwotICAgICAgICBSRUxFQVNFX0FTU0VS
VChhcnJheSk7Ci0gICAgICAgIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAw
LCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5l
bmQgLSByZXN1bHQuc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmICh1bnNpZ25lZCBudW1TdWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMo
KSkgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJu
czsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNb
MiAqIGldOwotICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgICAg
ICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1
YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAq
IGkgKyAxXSAtIHN0YXJ0KSwgQXJyYXlXaXRoQ29udGlndW91cyk7Ci0gICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBq
c1VuZGVmaW5lZCgpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIGluZGV4UHJvcGVydHlPZmZz
ZXQsIGpzTnVtYmVyKHJlc3VsdC5zdGFydCkpOwotICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIGlu
cHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKLQotICAgIHJldHVybiBhcnJheTsKLX0KLQogSlNB
cnJheSogY3JlYXRlRW1wdHlSZWdFeHBNYXRjaGVzQXJyYXkoSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCkKIHsKICAgICBWTSYgdm0g
PSBnbG9iYWxPYmplY3QtPnZtKCk7CkBAIC0xMzksOCArNTcsOCBAQCBKU0FycmF5KiBjcmVhdGVF
bXB0eVJlZ0V4cE1hdGNoZXNBcnJheShKCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBhcnJheS0+
cHV0RGlyZWN0KHZtLCBpbmRleFByb3BlcnR5T2Zmc2V0LCBqc051bWJlcigtMSkpOwotICAgIGFy
cmF5LT5wdXREaXJlY3Qodm0sIGlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKKyAgICBhcnJh
eS0+cHV0RGlyZWN0KHZtLCBSZWdFeHBNYXRjaGVzQXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0LCBq
c051bWJlcigtMSkpOworICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJh
eUlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKICAgICByZXR1cm4gYXJyYXk7CiB9CiAKQEAg
LTE0OSw5ICs2Nyw5IEBAIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZUltcGwoVk0K
ICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVG
b3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKGluZGV4aW5nVHlwZSk7CiAgICAgUHJvcGVy
dHlPZmZzZXQgb2Zmc2V0OwogICAgIHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHZtLnByb3BlcnR5TmFtZXMtPmluZGV4LCAwLCBvZmZz
ZXQpOwotICAgIEFTU0VSVChvZmZzZXQgPT0gaW5kZXhQcm9wZXJ0eU9mZnNldCk7CisgICAgQVNT
RVJUKG9mZnNldCA9PSBSZWdFeHBNYXRjaGVzQXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0KTsKICAg
ICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0
dXJlLCB2bS5wcm9wZXJ0eU5hbWVzLT5pbnB1dCwgMCwgb2Zmc2V0KTsKLSAgICBBU1NFUlQob2Zm
c2V0ID09IGlucHV0UHJvcGVydHlPZmZzZXQpOworICAgIEFTU0VSVChvZmZzZXQgPT0gUmVnRXhw
TWF0Y2hlc0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNldCk7CiAgICAgcmV0dXJuIHN0cnVjdHVyZTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0Fy
cmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
TWF0Y2hlc0FycmF5LmgJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE1hdGNoZXNBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCwxNyAr
MjAsOTggQEAKICNpZm5kZWYgUmVnRXhwTWF0Y2hlc0FycmF5X2gKICNkZWZpbmUgUmVnRXhwTWF0
Y2hlc0FycmF5X2gKIAorI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRlICJK
U0FycmF5LmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUmVnRXhwSW5saW5lcy5oIgogI2luY2x1ZGUgIlJlZ0V4cE9iamVj
dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIAotSlNBcnJheSogY3JlYXRlUmVnRXhwTWF0Y2hlc0Fy
cmF5KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqLCBSZWdFeHAqLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgTWF0Y2hSZXN1bHQmKTsKK3N0YXRpYyBjb25zdCBQcm9wZXJ0eU9m
ZnNldCBSZWdFeHBNYXRjaGVzQXJyYXlJbmRleFByb3BlcnR5T2Zmc2V0ID0gMTAwOworc3RhdGlj
IGNvbnN0IFByb3BlcnR5T2Zmc2V0IFJlZ0V4cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZz
ZXQgPSAxMDE7CisKK0FMV0FZU19JTkxJTkUgSlNBcnJheSogdHJ5Q3JlYXRlVW5pbml0aWFsaXpl
ZFJlZ0V4cE1hdGNoZXNBcnJheShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCB1bnNpZ25l
ZCBpbml0aWFsTGVuZ3RoKQoreworICAgIHVuc2lnbmVkIHZlY3Rvckxlbmd0aCA9IHN0ZDo6bWF4
KEJBU0VfVkVDVE9SX0xFTiwgaW5pdGlhbExlbmd0aCk7CisgICAgaWYgKHZlY3Rvckxlbmd0aCA+
IE1BWF9TVE9SQUdFX1ZFQ1RPUl9MRU5HVEgpCisgICAgICAgIHJldHVybiAwOworCisgICAgdm9p
ZCogdGVtcDsKKyAgICBpZiAoIXZtLmhlYXAudHJ5QWxsb2NhdGVTdG9yYWdlKDAsIEJ1dHRlcmZs
eTo6dG90YWxTaXplKDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSwgdHJ1ZSwgdmVj
dG9yTGVuZ3RoICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksICZ0ZW1wKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSBCdXR0ZXJmbHk6OmZyb21CYXNlKHRl
bXAsIDAsIHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKSk7CisgICAgYnV0dGVyZmx5LT5z
ZXRWZWN0b3JMZW5ndGgodmVjdG9yTGVuZ3RoKTsKKyAgICBidXR0ZXJmbHktPnNldFB1YmxpY0xl
bmd0aChpbml0aWFsTGVuZ3RoKTsKKworICAgIHJldHVybiBKU0FycmF5OjpjcmVhdGVXaXRoQnV0
dGVyZmx5KHZtLCBzdHJ1Y3R1cmUsIGJ1dHRlcmZseSk7Cit9CisKK0FMV0FZU19JTkxJTkUgSlNB
cnJheSogY3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGlucHV0LCBjb25zdCBTdHJpbmcm
IGlucHV0VmFsdWUsCisgICAgUmVnRXhwKiByZWdFeHAsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBN
YXRjaFJlc3VsdCYgcmVzdWx0KQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9u
KCJjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkiKTsKKyAgICAKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgCisgICAgVmVjdG9yPGludCwgMzI+IHN1YnBhdHRlcm5SZXN1bHRz
OworICAgIGludCBwb3NpdGlvbiA9IHJlZ0V4cC0+bWF0Y2hJbmxpbmUodm0sIGlucHV0VmFsdWUs
IHN0YXJ0T2Zmc2V0LCBzdWJwYXR0ZXJuUmVzdWx0cyk7CisgICAgaWYgKHBvc2l0aW9uID09IC0x
KSB7CisgICAgICAgIHJlc3VsdCA9IE1hdGNoUmVzdWx0OjpmYWlsZWQoKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmVzdWx0LnN0YXJ0ID0gcG9zaXRpb247CisgICAg
cmVzdWx0LmVuZCA9IHN1YnBhdHRlcm5SZXN1bHRzWzFdOworICAgIAorICAgIEpTQXJyYXkqIGFy
cmF5OworCisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGhhbmRsZSBhcnJheSBhbGxvY2F0aW9u
IGVycm9ycyBncmFjZWZ1bGx5LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTUxNDQKKyAgICAKKyAgICBpZiAoVU5MSUtFTFkoZ2xvYmFsT2JqZWN0LT5p
c0hhdmluZ0FCYWRUaW1lKCkpKSB7CisgICAgICAgIGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRl
VW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1
cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7CisgICAgICAgIAorICAgICAgICBh
cnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlu
cHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpKTsKKyAgICAgICAg
CisgICAgICAgIGlmICh1bnNpZ25lZCBudW1TdWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0
dGVybnMoKSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJw
YXR0ZXJuczsgKytpKSB7CisgICAgICAgICAgICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJl
c3VsdHNbMiAqIGldOworICAgICAgICAgICAgICAgIGlmIChzdGFydCA+PSAwKQorICAgICAgICAg
ICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNy
ZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3Vs
dHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGFycmF5ID0g
dHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1hdGNoZXNBcnJheSh2bSwgZ2xvYmFsT2JqZWN0
LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
ICsgMSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGFycmF5KTsKKyAgICAgICAgCisgICAgICAg
IGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAsIGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwg
aW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVuZCAtIHJlc3VsdC5zdGFydCksIEFycmF5V2l0
aENvbnRpZ3VvdXMpOworICAgICAgICAKKyAgICAgICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRl
cm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpKSB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5zOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
bnQgc3RhcnQgPSBzdWJwYXR0ZXJuUmVzdWx0c1syICogaV07CisgICAgICAgICAgICAgICAgaWYg
KHN0YXJ0ID49IDApCisgICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgo
dm0sIGksIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQs
IHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICogaSArIDFdIC0gc3RhcnQpLCBBcnJheVdpdGhD
b250aWd1b3VzKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGFy
cmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpzVW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRp
Z3VvdXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgYXJyYXktPnB1
dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5SW5kZXhQcm9wZXJ0eU9mZnNldCwganNOdW1i
ZXIocmVzdWx0LnN0YXJ0KSk7CisgICAgYXJyYXktPnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hl
c0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOworCisgICAgcmV0dXJuIGFycmF5Owor
fQorCiBpbmxpbmUgSlNBcnJheSogY3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KEV4ZWNTdGF0ZSog
ZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZywgUmVn
RXhwKiByZWdFeHAsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KQogewogICAgIE1hdGNoUmVzdWx0IGln
bm9yZWRSZXN1bHQ7Ci0gICAgcmV0dXJuIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBn
bG9iYWxPYmplY3QsIHN0cmluZywgcmVnRXhwLCBzdGFydE9mZnNldCwgaWdub3JlZFJlc3VsdCk7
CisgICAgcmV0dXJuIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBnbG9iYWxPYmplY3Qs
IHN0cmluZywgc3RyaW5nLT52YWx1ZShleGVjKSwgcmVnRXhwLCBzdGFydE9mZnNldCwgaWdub3Jl
ZFJlc3VsdCk7CiB9CiBKU0FycmF5KiBjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheShKU0ds
b2JhbE9iamVjdCosIEpTU3RyaW5nKiwgUmVnRXhwKik7CiBTdHJ1Y3R1cmUqIGNyZWF0ZVJlZ0V4
cE1hdGNoZXNBcnJheVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHJldmlzaW9u
IDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJSZWdFeHBNYXRj
aGVzQXJyYXkuaCIKKyNpbmNsdWRlICJSZWdFeHBPYmplY3RJbmxpbmVzLmgiCiAjaW5jbHVkZSAi
UmVnRXhwUHJvdG90eXBlLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
CkBAIC0xNTksNzcgKzE2MCwxNSBAQCB2b2lkIFJlZ0V4cE9iamVjdDo6cHV0KEpTQ2VsbCogY2Vs
bCwgRXhlCiAgICAgQmFzZTo6cHV0KGNlbGwsIGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNs
b3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdldExhc3RJbmRleEFzVW5zaWduZWQo
Ci0gICAgRXhlY1N0YXRlKiBleGVjLCBSZWdFeHBPYmplY3QqIHJlZ0V4cE9iamVjdCwgY29uc3Qg
U3RyaW5nJiBpbnB1dCkKLXsKLSAgICBKU1ZhbHVlIGpzTGFzdEluZGV4ID0gcmVnRXhwT2JqZWN0
LT5nZXRMYXN0SW5kZXgoKTsKLSAgICB1bnNpZ25lZCBsYXN0SW5kZXg7Ci0gICAgaWYgKExJS0VM
WShqc0xhc3RJbmRleC5pc1VJbnQzMigpKSkgewotICAgICAgICBsYXN0SW5kZXggPSBqc0xhc3RJ
bmRleC5hc1VJbnQzMigpOwotICAgICAgICBpZiAobGFzdEluZGV4ID4gaW5wdXQubGVuZ3RoKCkp
IHsKLSAgICAgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAg
ICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZG91YmxlIGRvdWJsZUxhc3RJbmRleCA9IGpzTGFzdEluZGV4LnRvSW50ZWdlcihleGVjKTsK
LSAgICAgICAgaWYgKGRvdWJsZUxhc3RJbmRleCA8IDAgfHwgZG91YmxlTGFzdEluZGV4ID4gaW5w
dXQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0TGFzdEluZGV4KGV4
ZWMsIDApOwotICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwotICAgICAgICB9Ci0gICAgICAg
IGxhc3RJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihkb3VibGVMYXN0SW5kZXgpOwotICAg
IH0KLSAgICByZXR1cm4gbGFzdEluZGV4OwotfQotCiBKU1ZhbHVlIFJlZ0V4cE9iamVjdDo6ZXhl
YyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5n
KiBzdHJpbmcpCiB7Ci0gICAgUmVnRXhwKiByZWdFeHAgPSB0aGlzLT5yZWdFeHAoKTsKLSAgICBS
ZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3IgPSBnbG9iYWxPYmplY3QtPnJlZ0V4
cENvbnN0cnVjdG9yKCk7Ci0gICAgU3RyaW5nIGlucHV0ID0gc3RyaW5nLT52YWx1ZShleGVjKTsg
Ly8gRklYTUU6IEhhbmRsZSBlcnJvcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTUxNDUKLSAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Ci0KLSAgICBp
ZiAoIXJlZ0V4cC0+Z2xvYmFsKCkpIHsKLSAgICAgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OwotICAg
ICAgICBKU0FycmF5KiBhcnJheSA9IGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBnbG9i
YWxPYmplY3QsIHN0cmluZywgcmVnRXhwLCAwLCByZXN1bHQpOwotICAgICAgICBpZiAoIWFycmF5
KQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgICAgICByZWdFeHBDb25zdHJ1Y3Rv
ci0+cmVjb3JkTWF0Y2godm0sIHJlZ0V4cCwgc3RyaW5nLCByZXN1bHQpOwotICAgICAgICByZXR1
cm4gYXJyYXk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGFzdEluZGV4ID0gZ2V0TGFzdEluZGV4
QXNVbnNpZ25lZChleGVjLCB0aGlzLCBpbnB1dCk7Ci0gICAgaWYgKGxhc3RJbmRleCA9PSBVSU5U
X01BWCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIAotICAgIE1hdGNoUmVzdWx0IHJl
c3VsdDsKLSAgICBKU0FycmF5KiBhcnJheSA9Ci0gICAgICAgIGNyZWF0ZVJlZ0V4cE1hdGNoZXNB
cnJheShleGVjLCBnbG9iYWxPYmplY3QsIHN0cmluZywgcmVnRXhwLCBsYXN0SW5kZXgsIHJlc3Vs
dCk7Ci0gICAgaWYgKCFhcnJheSkgewotICAgICAgICBzZXRMYXN0SW5kZXgoZXhlYywgMCk7Ci0g
ICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0gICAgc2V0TGFzdEluZGV4KGV4ZWMsIHJl
c3VsdC5lbmQpOwotICAgIHJlZ0V4cENvbnN0cnVjdG9yLT5yZWNvcmRNYXRjaCh2bSwgcmVnRXhw
LCBzdHJpbmcsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIGFycmF5OworICAgIHJldHVybiBleGVjSW5s
aW5lKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RyaW5nKTsKIH0KIAogLy8gU2hhcmVkIGltcGxlbWVu
dGF0aW9uIHVzZWQgYnkgdGVzdCBhbmQgZXhlYy4KIE1hdGNoUmVzdWx0IFJlZ0V4cE9iamVjdDo6
bWF0Y2goRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0
cmluZyogc3RyaW5nKQogewotICAgIFJlZ0V4cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7Ci0g
ICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZ2xvYmFsT2JqZWN0LT5y
ZWdFeHBDb25zdHJ1Y3RvcigpOwotICAgIFN0cmluZyBpbnB1dCA9IHN0cmluZy0+dmFsdWUoZXhl
Yyk7IC8vIEZJWE1FOiBIYW5kbGUgZXJyb3JzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU1MTQ1Ci0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAg
IGlmICghcmVnRXhwLT5nbG9iYWwoKSkKLSAgICAgICAgcmV0dXJuIHJlZ0V4cENvbnN0cnVjdG9y
LT5wZXJmb3JtTWF0Y2godm0sIHJlZ0V4cCwgc3RyaW5nLCBpbnB1dCwgMCk7Ci0KLSAgICB1bnNp
Z25lZCBsYXN0SW5kZXggPSBnZXRMYXN0SW5kZXhBc1Vuc2lnbmVkKGV4ZWMsIHRoaXMsIGlucHV0
KTsKLSAgICBpZiAobGFzdEluZGV4ID09IFVJTlRfTUFYKQotICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQ6OmZhaWxlZCgpOwotICAgIAotICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHJlZ0V4cENv
bnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2godm0sIHJlZ0V4cCwgc3RyaW5nLCBpbnB1dCwgbGFzdElu
ZGV4KTsKLSAgICBzZXRMYXN0SW5kZXgoZXhlYywgcmVzdWx0LmVuZCk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICByZXR1cm4gbWF0Y2hJbmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJpbmcp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjcs
NyArNjcsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9vbCB0ZXN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykgeyByZXR1
cm4gISFtYXRjaChleGVjLCBnbG9iYWxPYmplY3QsIHN0cmluZyk7IH0KKyAgICBib29sIHRlc3RJ
bmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0
cmluZyogc3RyaW5nKSB7IHJldHVybiAhIW1hdGNoSW5saW5lKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RyaW5nKTsgfQogICAgIEpTVmFsdWUgZXhlYyhFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCos
IEpTU3RyaW5nKik7CisgICAgSlNWYWx1ZSBleGVjSW5saW5lKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNTdHJpbmcqKTsKIAogICAgIHN0YXRpYyBib29sIGdldE93blByb3BlcnR5U2xv
dChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90Jik7CiAg
ICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgSlNW
YWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xMDMsNiArMTA1LDcgQEAgcHJvdGVjdGVkOgog
CiBwcml2YXRlOgogICAgIE1hdGNoUmVzdWx0IG1hdGNoKEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2Jq
ZWN0KiwgSlNTdHJpbmcqKTsKKyAgICBNYXRjaFJlc3VsdCBtYXRjaElubGluZShFeGVjU3RhdGUq
LCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CiAKICAgICBXcml0ZUJhcnJpZXI8UmVnRXhw
PiBtX3JlZ0V4cDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9sYXN0SW5kZXg7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3RJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0SW5s
aW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDEyLCAyMDE2IEFwcGxlIElu
Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAq
LworCisjaWZuZGVmIFJlZ0V4cE9iamVjdElubGluZXNfaAorI2RlZmluZSBSZWdFeHBPYmplY3RJ
bmxpbmVzX2gKKworI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKKyNpbmNsdWRlICJFcnJv
ci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIKKyNpbmNsdWRlICJKU0FycmF5Lmgi
CisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5oIgorI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJSZWdFeHBDb25zdHJ1Y3Rvci5oIgorI2lu
Y2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJheS5oIgorI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElORSB1bnNpZ25lZCBnZXRSZWdFeHBPYmpl
Y3RMYXN0SW5kZXhBc1Vuc2lnbmVkKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgUmVnRXhwT2JqZWN0
KiByZWdFeHBPYmplY3QsIGNvbnN0IFN0cmluZyYgaW5wdXQpCit7CisgICAgSlNWYWx1ZSBqc0xh
c3RJbmRleCA9IHJlZ0V4cE9iamVjdC0+Z2V0TGFzdEluZGV4KCk7CisgICAgdW5zaWduZWQgbGFz
dEluZGV4OworICAgIGlmIChMSUtFTFkoanNMYXN0SW5kZXguaXNVSW50MzIoKSkpIHsKKyAgICAg
ICAgbGFzdEluZGV4ID0ganNMYXN0SW5kZXguYXNVSW50MzIoKTsKKyAgICAgICAgaWYgKGxhc3RJ
bmRleCA+IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICByZWdFeHBPYmplY3QtPnNldExh
c3RJbmRleChleGVjLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGRvdWJsZSBkb3VibGVMYXN0SW5kZXggPSBqc0xhc3RJ
bmRleC50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIGlmIChkb3VibGVMYXN0SW5kZXggPCAwIHx8
IGRvdWJsZUxhc3RJbmRleCA+IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgICAgICByZWdFeHBP
YmplY3QtPnNldExhc3RJbmRleChleGVjLCAwKTsKKyAgICAgICAgICAgIHJldHVybiBVSU5UX01B
WDsKKyAgICAgICAgfQorICAgICAgICBsYXN0SW5kZXggPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZG91YmxlTGFzdEluZGV4KTsKKyAgICB9CisgICAgcmV0dXJuIGxhc3RJbmRleDsKK30KKworSlNW
YWx1ZSBSZWdFeHBPYmplY3Q6OmV4ZWNJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKQoreworICAgIFJlZ0V4cCogcmVn
RXhwID0gdGhpcy0+cmVnRXhwKCk7CisgICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0
cnVjdG9yID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBDb25zdHJ1Y3RvcigpOworICAgIFN0cmluZyBp
bnB1dCA9IHN0cmluZy0+dmFsdWUoZXhlYyk7IC8vIEZJWE1FOiBIYW5kbGUgZXJyb3JzLiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ1CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgYm9vbCBnbG9iYWwgPSByZWdFeHAtPmdsb2JhbCgp
OworCisgICAgdW5zaWduZWQgbGFzdEluZGV4OworICAgIGlmIChnbG9iYWwpIHsKKyAgICAgICAg
bGFzdEluZGV4ID0gZ2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4QXNVbnNpZ25lZChleGVjLCB0aGlz
LCBpbnB1dCk7CisgICAgICAgIGlmIChsYXN0SW5kZXggPT0gVUlOVF9NQVgpCisgICAgICAgICAg
ICByZXR1cm4ganNOdWxsKCk7CisgICAgfSBlbHNlCisgICAgICAgIGxhc3RJbmRleCA9IDA7Cisg
ICAgCisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OworICAgIEpTQXJyYXkqIGFycmF5ID0gY3JlYXRl
UmVnRXhwTWF0Y2hlc0FycmF5KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RyaW5nLCBpbnB1dCwgcmVn
RXhwLCAwLCByZXN1bHQpOworICAgIGlmICghYXJyYXkpIHsKKyAgICAgICAgaWYgKGdsb2JhbCkK
KyAgICAgICAgICAgIHNldExhc3RJbmRleChleGVjLCAwKTsKKyAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOworICAgIH0KKyAgICBpZiAoZ2xvYmFsKQorICAgICAgICBzZXRMYXN0SW5kZXgoZXhlYywg
cmVzdWx0LmVuZCk7CisgICAgcmVnRXhwQ29uc3RydWN0b3ItPnJlY29yZE1hdGNoKHZtLCByZWdF
eHAsIHN0cmluZywgcmVzdWx0KTsKKyAgICByZXR1cm4gYXJyYXk7Cit9CisKKy8vIFNoYXJlZCBp
bXBsZW1lbnRhdGlvbiB1c2VkIGJ5IHRlc3QgYW5kIGV4ZWMuCitNYXRjaFJlc3VsdCBSZWdFeHBP
YmplY3Q6Om1hdGNoSW5saW5lKAorICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIHN0cmluZykKK3sKKyAgICBSZWdFeHAqIHJlZ0V4cCA9
IHRoaXMtPnJlZ0V4cCgpOworICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3Rv
ciA9IGdsb2JhbE9iamVjdC0+cmVnRXhwQ29uc3RydWN0b3IoKTsKKyAgICBTdHJpbmcgaW5wdXQg
PSBzdHJpbmctPnZhbHVlKGV4ZWMpOyAvLyBGSVhNRTogSGFuZGxlIGVycm9ycy4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTE0NQorICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBpZiAoIXJlZ0V4cC0+Z2xvYmFsKCkpCisgICAgICAgIHJldHVy
biByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKHZtLCByZWdFeHAsIHN0cmluZywgaW5w
dXQsIDApOworCisgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gZ2V0UmVnRXhwT2JqZWN0TGFzdElu
ZGV4QXNVbnNpZ25lZChleGVjLCB0aGlzLCBpbnB1dCk7CisgICAgaWYgKGxhc3RJbmRleCA9PSBV
SU5UX01BWCkKKyAgICAgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlsZWQoKTsKKyAgICAKKyAg
ICBNYXRjaFJlc3VsdCByZXN1bHQgPSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKHZt
LCByZWdFeHAsIHN0cmluZywgaW5wdXQsIGxhc3RJbmRleCk7CisgICAgc2V0TGFzdEluZGV4KGV4
ZWMsIHJlc3VsdC5lbmQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gUmVnRXhwT2JqZWN0SW5saW5lc19oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273313</attachid>
            <date>2016-03-08 12:14:22 -0800</date>
            <delta_ts>2016-03-08 12:32:38 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43837</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3Nzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE2LTAzLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVnZXhwIG1hdGNoaW5nIHNob3VsZCBpbmN1ciBsZXNzIGNhbGwgb3ZlcmhlYWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTE4MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByZXZpb3VzbHkgd2UgaGFk
IERGRy9GVEwgY29kZSBjYWxsIGludG8gdGhlIERGR09wZXJhdGlvbiwgd2hpY2ggdGhlbiBjYWxs
ZWQgaW4gdG8KKyAgICAgICAgUmVnRXhwT2JqZWN0LCB3aGljaCB0aGVuIGNhbGxlZCBpbnRvIGNy
ZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheSwgd2hpY2ggdGhlbiBjYWxsZWQgaW50bworICAgICAgICBS
ZWdFeHAsIHdoaWNoIHRoZW4gY2FsbGVkIHRoZSBjb2RlIGdlbmVyYXRlZCBieSBZYXJyLgorCisg
ICAgICAgIE5vdyB3ZSBoYXZlIERGRy9GVEwgY29kZSBjYWxsIGludG8gdGhlIERGR09wZXJhdGlv
biwgd2hpY2ggZG9lcyBhbGwgb2YgdGhlIHRoaW5ncyBhbmQgY2FsbHMKKyAgICAgICAgaW50byBj
b2RlIGdlbmVyYXRlZCBieSBZYXJyLgorCisgICAgICAgIFRoaXMgaXMgYW5vdGhlciB0aW55IE9j
dGFuZS9yZWdleHAgc3BlZWQtdXAuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4cEZsYWdzKToK
KyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpt
YXRjaCk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seSk6CisgICAgICAg
IChKU0M6OlJlZ0V4cDo6ZGVsZXRlQ29kZSk6CisgICAgICAgIChKU0M6OlJlZ0V4cEZ1bmN0aW9u
YWxUZXN0Q29sbGVjdG9yOjpjbGVhclJlZ0V4cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJl
Z0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UmVnRXhw
Ojpjb21waWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6Y2xlYXJSZWdFeHAp
OgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChK
U0M6OlJlZ0V4cDo6bWF0Y2hJbmxpbmUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGVJ
Zk5lY2Vzc2FyeU1hdGNoT25seSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheSk6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZVN0cnVjdHVyZUltcGwpOgorICAgICAgICAoSlNDOjp0cnlDcmVh
dGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Y3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoSlNDOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVnRXhwTWF0Y2hl
c0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OlJlZ0V4cE9iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpleGVj
KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjptYXRjaCk6CisgICAgICAgIChKU0M6Omdl
dExhc3RJbmRleEFzVW5zaWduZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0TGFzdEluZGV4KToKKyAg
ICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0Ojp0ZXN0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0Ojp0ZXN0SW5saW5lKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdElubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OmdldFJlZ0V4cE9iamVjdExhc3RJbmRleEFzVW5zaWdu
ZWQpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmV4ZWNJbmxpbmUpOgorICAgICAgICAo
SlNDOjpSZWdFeHBPYmplY3Q6Om1hdGNoSW5saW5lKToKKwogMjAxNi0wMy0wOCAgTWljaGFlbCBT
YWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBbRVM2XSBSZWd1bGFyIEV4cHJl
c3Npb24gY2Fub25pY2FsaXphdGlvbiB0YWJsZXMgZm9yIFVuaWNvZGUgbmVlZCB0byBiZSB1cGRh
dGVkIHRvIHVzZSBVbmljb2RlIENhc2VGb2xkaW5nLnR4dApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00ODYsNiArNDg2LDggQEAKIAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFi
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovOyB9OwogCQkw
RjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyog
REZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMTFBQzFCQzM4NjJDMDBD
NzRDREIgLyogQ29weUJhcnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjdDMzlGQjFDOEY2MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzM5
RkExQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMuaCAqLzsgfTsKKwkJMEY3QzM5RkQx
QzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0MzOUZDMUM4RjY1OTUwMDQ4MDE1MSAv
KiBSZWdFeHBPYmplY3RJbmxpbmVzLmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0
NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNjM3LDYgKzI2MzksOCBAQAogCQkwRjc5MDg1MzE5QTI5MEIyMDBGNjMx
MEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QzExQUMx
QkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcHlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
N0MzOUZBMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ0V4cElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3QzM5RkMxQzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhwT2JqZWN0SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUg
LyogQnlWYWxJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQz
QjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlv
blByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTg3OSwxMSArNTg4
MywxMyBAQAogCQkJCTg2Rjc1RUZDMTUxQzA2MkYwMDdDOUJBMyAvKiBSZWdFeHBDYWNoZWRSZXN1
bHQuaCAqLywKIAkJCQlCQ0QyMDJCRDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0
b3IuY3BwICovLAogCQkJCUJDRDIwMkJFMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1
Y3Rvci5oICovLAorCQkJCTBGN0MzOUZBMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVz
LmggKi8sCiAJCQkJQTE3MTJCNDAxMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oICovLAog
CQkJCTg2Rjc1RUZEMTUxQzA2MkYwMDdDOUJBMyAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwICov
LAogCQkJCTkzQ0VEREZCMEVBOTFFRTYwMDI1OEVCRSAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuaCAq
LywKIAkJCQlGNjkyQTg3QjAyNTU1OTdEMDFGRjYwRjcgLyogUmVnRXhwT2JqZWN0LmNwcCAqLywK
IAkJCQlGNjkyQTg3QzAyNTU1OTdEMDFGRjYwRjcgLyogUmVnRXhwT2JqZWN0LmggKi8sCisJCQkJ
MEY3QzM5RkMxQzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCAqLywKIAkJ
CQlCQ0QyMDJCRjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCAqLywKIAkJ
CQlCQ0QyMDJDMDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggKi8sCiAJCQkJ
MEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovLApAQCAtNzIxMSw2ICs3MjE3
LDcgQEAKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QkZGM0MwMTc5ODY4OTQwMDAyRjQ2MiAv
KiBERkdGaWx0cmF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjdDMzlGQjFDOEY2
MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3
NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzkzMCw2ICs3OTM3LDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJF
OTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0
MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3QzM5
RkQxQzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyNCw3ICs2MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlZ0V4cE9iamVjdC0+ZXhlYyhleGVjLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50KSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWNJbmxpbmUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudCkpOwogfQogICAgICAgICAKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZ0V4cE9iamVjdCogcmVnRXhwT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCkBAIC02MzcsNyArNjM3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIEpTU3RyaW5nKiBpbnB1dCA9IGFy
Z3VtZW50LnRvU3RyaW5nT3JOdWxsKGV4ZWMpOwogICAgIGlmICghaW5wdXQpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1dCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhwT2JqZWN0LT5leGVjSW5saW5lKGV4ZWMs
IGdsb2JhbE9iamVjdCwgaW5wdXQpKTsKIH0KICAgICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWNHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKQEAgLTY2Miw3ICs2NjIsNyBAQCBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
IAotICAgIHJldHVybiByZWdFeHBPYmplY3QtPnRlc3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1
dCk7CisgICAgcmV0dXJuIHJlZ0V4cE9iamVjdC0+dGVzdElubGluZShleGVjLCBnbG9iYWxPYmpl
Y3QsIGlucHV0KTsKIH0KIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVz
dChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZ0V4cE9i
amVjdCogcmVnRXhwT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCkBAIC02
NzUsNyArNjc1LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAog
ICAgIEpTU3RyaW5nKiBpbnB1dCA9IGFyZ3VtZW50LnRvU3RyaW5nT3JOdWxsKGV4ZWMpOwogICAg
IGlmICghaW5wdXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcmVnRXhwT2Jq
ZWN0LT50ZXN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5wdXQpOworICAgIHJldHVybiByZWdFeHBP
YmplY3QtPnRlc3RJbmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1dCk7CiB9CiAKIHNpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3RHZW5lcmljKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEsIDIwMDQgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSwgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAxMCBQZXRlciBWYXJnYSAo
cHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgpAQCAtMjYs
MTggKzI2LDExIEBACiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKKyNpbmNsdWRlICJSZWdFeHBJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUgIllhcnJKSVQuaCIKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCi0jZGVmaW5lIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9HRU4gMAotCi0jaWYg
UkVHRVhQX0ZVTkNfVEVTVF9EQVRBX0dFTgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8
c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBSZWdFeHA6OnNfaW5mbyA9IHsgIlJlZ0V4cCIsIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoUmVnRXhwKSB9OwpAQCAtODEsMzMgKzc0LDYgQEAgUmVnRXhwRmxh
Z3MgcmVnRXhwRmxhZ3MoY29uc3QgU3RyaW5nJiBzdAogfQogCiAjaWYgUkVHRVhQX0ZVTkNfVEVT
VF9EQVRBX0dFTgotY2xhc3MgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3IgewotICAgIC8v
IFRoaXMgY2xhc3MgaXMgbm90IHRocmVhZCBzYWZlLgotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBzX2ZpbGVOYW1lOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZ0V4
cEZ1bmN0aW9uYWxUZXN0Q29sbGVjdG9yKiBnZXQoKTsKLQotICAgIH5SZWdFeHBGdW5jdGlvbmFs
VGVzdENvbGxlY3RvcigpOwotCi0gICAgdm9pZCBvdXRwdXRPbmVUZXN0KFJlZ0V4cCosIFN0cmlu
ZywgaW50LCBpbnQqLCBpbnQpOwotICAgIHZvaWQgY2xlYXJSZWdFeHAoUmVnRXhwKiByZWdFeHAp
Ci0gICAgewotICAgICAgICBpZiAocmVnRXhwID09IG1fbGFzdFJlZ0V4cCkKLSAgICAgICAgICAg
IG1fbGFzdFJlZ0V4cCA9IDA7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFJlZ0V4cEZ1bmN0aW9u
YWxUZXN0Q29sbGVjdG9yKCk7Ci0KLSAgICB2b2lkIG91dHB1dEVzY2FwZWRTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgYm9vbCBlc2NhcGVTbGFzaCA9IGZhbHNlKTsKLQotICAgIHN0YXRpYyBSZWdFeHBG
dW5jdGlvbmFsVGVzdENvbGxlY3Rvciogc19pbnN0YW5jZTsKLSAgICBGSUxFKiBtX2ZpbGU7Ci0g
ICAgUmVnRXhwKiBtX2xhc3RSZWdFeHA7Ci19OwotCiBjb25zdCBjaGFyKiBjb25zdCBSZWdFeHBG
dW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6c19maWxlTmFtZSA9ICIvdG1wL1JlZ0V4cFRlc3RzRGF0
YSI7CiBSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3RvciogUmVnRXhwRnVuY3Rpb25hbFRlc3RD
b2xsZWN0b3I6OnNfaW5zdGFuY2UgPSAwOwogCkBAIC0zMjAsODkgKzI4Niw5IEBAIHZvaWQgUmVn
RXhwOjpjb21waWxlKFZNKiB2bSwgWWFycjo6WWFyckMKICAgICBtX3JlZ0V4cEJ5dGVjb2RlID0g
WWFycjo6Ynl0ZUNvbXBpbGUocGF0dGVybiwgJnZtLT5tX3JlZ0V4cEFsbG9jYXRvcik7CiB9CiAK
LXZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnkoVk0mIHZtLCBZYXJyOjpZYXJyQ2hhclNp
emUgY2hhclNpemUpCi17Ci0gICAgaWYgKGhhc0NvZGUoKSkgewotI2lmIEVOQUJMRShZQVJSX0pJ
VCkKLSAgICAgICAgaWYgKG1fc3RhdGUgIT0gSklUQ29kZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKChjaGFyU2l6ZSA9PSBZYXJyOjpDaGFyOCkgJiYgKG1fcmVnRXhwSklUQ29k
ZS5oYXM4Qml0Q29kZSgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKChjaGFy
U2l6ZSA9PSBZYXJyOjpDaGFyMTYpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzMTZCaXRDb2RlKCkp
KQotICAgICAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0g
ICAgfQotCi0gICAgY29tcGlsZSgmdm0sIGNoYXJTaXplKTsKLX0KLQogaW50IFJlZ0V4cDo6bWF0
Y2goVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3I8
aW50LCAzMj4mIG92ZWN0b3IpCiB7Ci0jaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgIG1f
cnRNYXRjaENhbGxDb3VudCsrOwotICAgIG1fcnRNYXRjaFRvdGFsU3ViamVjdFN0cmluZ0xlbiAr
PSAoZG91YmxlKShzLmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwotI2VuZGlmCi0KLSAgICBBU1NF
UlQobV9zdGF0ZSAhPSBQYXJzZUVycm9yKTsKLSAgICBjb21waWxlSWZOZWNlc3Nhcnkodm0sIHMu
aXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7Ci0KLSAgICBpbnQgb2Zmc2V0
VmVjdG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAyOwotICAgIG92ZWN0b3IucmVz
aXplKG9mZnNldFZlY3RvclNpemUpOwotICAgIGludCogb2Zmc2V0VmVjdG9yID0gb3ZlY3Rvci5k
YXRhKCk7Ci0KLSAgICBpbnQgcmVzdWx0OwotI2lmIEVOQUJMRShZQVJSX0pJVCkKLSAgICBpZiAo
bV9zdGF0ZSA9PSBKSVRDb2RlKSB7Ci0gICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAg
ICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBzdGFy
dE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKS5zdGFydDsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJz
MTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3Rvcikuc3RhcnQ7Ci0jaWYg
RU5BQkxFKFlBUlJfSklUX0RFQlVHKQotICAgICAgICBtYXRjaENvbXBhcmVXaXRoSW50ZXJwcmV0
ZXIocywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKLSNlbmRpZgotICAgIH0g
ZWxzZQotI2VuZGlmCi0gICAgICAgIHJlc3VsdCA9IFlhcnI6OmludGVycHJldChtX3JlZ0V4cEJ5
dGVjb2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KG9mZnNldFZlY3RvcikpOwotCi0gICAgLy8gRklYTUU6IFRoZSBZQVJSIGVuZ2luZSBzaG91bGQg
aGFuZGxlIHVuc2lnbmVkIG9yIHNpemVfdCBsZW5ndGggbWF0Y2hlcy4KLSAgICAvLyBUaGUgWUFS
UiBJbnRlcnByZXRlciBpcyAidW5zaWduZWQiIGNsZWFuLCB3aGlsZSB0aGUgWUFSUiBKSVQgaGFz
bid0IGJlZW4gYWRkcmVzc2VkLgotICAgIC8vIFRoZSBvZmZzZXQgdmVjdG9yIGhhbmRsaW5nIG5l
ZWRzIHRvIGNoYW5nZSBhcyB3ZWxsLgotICAgIC8vIFJpZ2h0IG5vdyB3ZSBjb252ZXJ0IGEgbWF0
Y2ggd2hlcmUgdGhlIG9mZnNldHMgb3ZlcmZsb3dlZCBpbnRvIG1hdGNoIGZhaWx1cmUuCi0gICAg
Ly8gVGhlcmUgYXJlIHR3byBwbGFjZXMgaW4gV2ViQ29yZSB0aGF0IGNhbGwgdGhlIGludGVycHJl
dGVyIGRpcmVjdGx5IHRoYXQgbmVlZCB0bwotICAgIC8vIGhhdmUgdGhlaXIgb2Zmc2V0cyBjaGFu
Z2VkIHRvIGludCBhcyB3ZWxsLiBUaGV5IGFyZSB5YXJyL1JlZ3VsYXJFeHByZXNzaW9uLmNwcAot
ICAgIC8vIGFuZCBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKLSAgICBpZiAo
cy5sZW5ndGgoKSA+IElOVF9NQVgpIHsKLSAgICAgICAgYm9vbCBvdmVyZmxvd2VkID0gZmFsc2U7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA8IC0xKQotICAgICAgICAgICAgb3ZlcmZsb3dlZCA9IHRy
dWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBtX251bVN1YnBhdHRlcm5z
OyBpKyspIHsKLSAgICAgICAgICAgIGlmICgob2Zmc2V0VmVjdG9yW2kqMl0gPCAtMSkgfHwgKChv
ZmZzZXRWZWN0b3JbaSoyXSA+PSAwKSAmJiAob2Zmc2V0VmVjdG9yW2kqMisxXSA8IC0xKSkpIHsK
LSAgICAgICAgICAgICAgICBvdmVyZmxvd2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBvZmZz
ZXRWZWN0b3JbaSoyXSA9IC0xOwotICAgICAgICAgICAgICAgIG9mZnNldFZlY3RvcltpKjIrMV0g
PSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvdmVyZmxvd2Vk
KQotICAgICAgICAgICAgcmVzdWx0ID0gLTE7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdCA+
PSAtMSk7Ci0KLSNpZiBSRUdFWFBfRlVOQ19URVNUX0RBVEFfR0VOCi0gICAgUmVnRXhwRnVuY3Rp
b25hbFRlc3RDb2xsZWN0b3I6OmdldCgpLT5vdXRwdXRPbmVUZXN0KHRoaXMsIHMsIHN0YXJ0T2Zm
c2V0LCBvZmZzZXRWZWN0b3IsIHJlc3VsdCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSRUdFWFBf
VFJBQ0lORykKLSAgICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAgICBtX3J0TWF0Y2hGb3VuZENv
dW50Kys7Ci0jZW5kaWYKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1hdGNoSW5s
aW5lKHZtLCBzLCBzdGFydE9mZnNldCwgb3ZlY3Rvcik7CiB9CiAKIHZvaWQgUmVnRXhwOjpjb21w
aWxlTWF0Y2hPbmx5KFZNKiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQpAQCAtNDM5
LDY1ICszMjUsOSBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShWTSogdm0sIFlhCiAg
ICAgbV9yZWdFeHBCeXRlY29kZSA9IFlhcnI6OmJ5dGVDb21waWxlKHBhdHRlcm4sICZ2bS0+bV9y
ZWdFeHBBbGxvY2F0b3IpOwogfQogCi12b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5TWF0
Y2hPbmx5KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQotewotICAgIGlmICho
YXNDb2RlKCkpIHsKLSNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgICAgIGlmIChtX3N0YXRlICE9
IEpJVENvZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgoY2hhclNpemUgPT0g
WWFycjo6Q2hhcjgpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzOEJpdENvZGVNYXRjaE9ubHkoKSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6Q2hh
cjE2KSAmJiAobV9yZWdFeHBKSVRDb2RlLmhhczE2Qml0Q29kZU1hdGNoT25seSgpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIH0KLQot
ICAgIGNvbXBpbGVNYXRjaE9ubHkoJnZtLCBjaGFyU2l6ZSk7Ci19Ci0KIE1hdGNoUmVzdWx0IFJl
Z0V4cDo6bWF0Y2goVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
KQogewotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBtX3J0TWF0Y2hPbmx5Q2FsbENv
dW50Kys7Ci0gICAgbV9ydE1hdGNoT25seVRvdGFsU3ViamVjdFN0cmluZ0xlbiArPSAoZG91Ymxl
KShzLmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwotI2VuZGlmCi0KLSAgICBBU1NFUlQobV9zdGF0
ZSAhPSBQYXJzZUVycm9yKTsKLSAgICBjb21waWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkodm0sIHMu
aXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7Ci0KLSNpZiBFTkFCTEUoWUFS
Ul9KSVQpCi0gICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewotICAgICAgICBNYXRjaFJlc3Vs
dCByZXN1bHQgPSBzLmlzOEJpdCgpID8KLSAgICAgICAgICAgIG1fcmVnRXhwSklUQ29kZS5leGVj
dXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkpIDoKLSAgICAgICAg
ICAgIG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zmc2V0
LCBzLmxlbmd0aCgpKTsKLSNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgICAgIGlmICgh
cmVzdWx0KQotICAgICAgICAgICAgbV9ydE1hdGNoT25seUZvdW5kQ291bnQrKzsKLSNlbmRpZgot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG9mZnNldFZl
Y3RvclNpemUgPSAobV9udW1TdWJwYXR0ZXJucyArIDEpICogMjsKLSAgICBpbnQqIG9mZnNldFZl
Y3RvcjsKLSAgICBWZWN0b3I8aW50LCAzMj4gbm9uUmV0dXJuZWRPdmVjdG9yOwotICAgIG5vblJl
dHVybmVkT3ZlY3Rvci5yZXNpemUob2Zmc2V0VmVjdG9yU2l6ZSk7Ci0gICAgb2Zmc2V0VmVjdG9y
ID0gbm9uUmV0dXJuZWRPdmVjdG9yLmRhdGEoKTsKLSAgICBpbnQgciA9IFlhcnI6OmludGVycHJl
dChtX3JlZ0V4cEJ5dGVjb2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwgcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCo+KG9mZnNldFZlY3RvcikpOwotI2lmIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9H
RU4KLSAgICBSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6Z2V0KCktPm91dHB1dE9uZVRl
c3QodGhpcywgcywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKLSNlbmRpZgot
Ci0gICAgaWYgKHIgPj0gMCkgewotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICAgICAg
bV9ydE1hdGNoT25seUZvdW5kQ291bnQrKzsKLSNlbmRpZgotICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQociwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG9mZnNldFZlY3RvcilbMV0pOwot
ICAgIH0KLQotICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbGVkKCk7CisgICAgcmV0dXJuIG1h
dGNoSW5saW5lKHZtLCBzLCBzdGFydE9mZnNldCk7CiB9CiAKIHZvaWQgUmVnRXhwOjpkZWxldGVD
b2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZpc2lv
biAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC02NCw2ICs2NCwxMSBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBp
bnQgbWF0Y2goVk0mLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9y
PGludCwgMzI+JiBvdmVjdG9yKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBNYXRjaFJlc3VsdCBt
YXRjaChWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KTsKKworICAgIC8v
IENhbGwgdGhlc2UgdmVyc2lvbnMgb2YgdGhlIG1hdGNoIGZ1bmN0aW9ucyBpZiB5b3UncmUgZGVz
cGVyYXRlIGZvciBwZXJmb3JtYW5jZS4KKyAgICBpbnQgbWF0Y2hJbmxpbmUoVk0mLCBjb25zdCBT
dHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yPGludCwgMzI+JiBvdmVjdG9yKTsK
KyAgICBNYXRjaFJlc3VsdCBtYXRjaElubGluZShWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0KTsKKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWJwYXR0ZXJucygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtU3VicGF0dGVybnM7IH0KIAogICAgIGJvb2wgaGFzQ29kZSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxLCAyMDA0IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJp
Z2h0IChjKSAyMDA3LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDEwIFBldGVyIFZhcmdhIChwdmFyZ2FAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVm
IFJlZ0V4cElubGluZXNfaAorI2RlZmluZSBSZWdFeHBJbmxpbmVzX2gKKworI2luY2x1ZGUgIlJl
Z0V4cC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJZYXJyLmgiCisjaW5j
bHVkZSAiWWFyckpJVC5oIgorCisjZGVmaW5lIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9HRU4gMAor
CisjaWYgUkVHRVhQX0ZVTkNfVEVTVF9EQVRBX0dFTgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IEpTQyB7CisKKyNpZiBSRUdFWFBfRlVOQ19URVNUX0RBVEFfR0VOCitjbGFzcyBSZWdFeHBGdW5j
dGlvbmFsVGVzdENvbGxlY3RvciB7CisgICAgLy8gVGhpcyBjbGFzcyBpcyBub3QgdGhyZWFkIHNh
ZmUuCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfZmlsZU5hbWU7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3IqIGdl
dCgpOworCisgICAgflJlZ0V4cEZ1bmN0aW9uYWxUZXN0Q29sbGVjdG9yKCk7CisKKyAgICB2b2lk
IG91dHB1dE9uZVRlc3QoUmVnRXhwKiwgU3RyaW5nLCBpbnQsIGludCosIGludCk7CisgICAgdm9p
ZCBjbGVhclJlZ0V4cChSZWdFeHAqIHJlZ0V4cCkKKyAgICB7CisgICAgICAgIGlmIChyZWdFeHAg
PT0gbV9sYXN0UmVnRXhwKQorICAgICAgICAgICAgbV9sYXN0UmVnRXhwID0gMDsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3IoKTsKKworICAgIHZv
aWQgb3V0cHV0RXNjYXBlZFN0cmluZyhjb25zdCBTdHJpbmcmLCBib29sIGVzY2FwZVNsYXNoID0g
ZmFsc2UpOworCisgICAgc3RhdGljIFJlZ0V4cEZ1bmN0aW9uYWxUZXN0Q29sbGVjdG9yKiBzX2lu
c3RhbmNlOworICAgIEZJTEUqIG1fZmlsZTsKKyAgICBSZWdFeHAqIG1fbGFzdFJlZ0V4cDsKK307
CisjZW5kaWYgLy8gUkVHRVhQX0ZVTkNfVEVTVF9EQVRBX0dFTgorCitBTFdBWVNfSU5MSU5FIHZv
aWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnkoVk0mIHZtLCBZYXJyOjpZYXJyQ2hhclNpemUg
Y2hhclNpemUpCit7CisgICAgaWYgKGhhc0NvZGUoKSkgeworI2lmIEVOQUJMRShZQVJSX0pJVCkK
KyAgICAgICAgaWYgKG1fc3RhdGUgIT0gSklUQ29kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKChjaGFyU2l6ZSA9PSBZYXJyOjpDaGFyOCkgJiYgKG1fcmVnRXhwSklUQ29kZS5o
YXM4Qml0Q29kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKChjaGFyU2l6
ZSA9PSBZYXJyOjpDaGFyMTYpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzMTZCaXRDb2RlKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAg
fQorCisgICAgY29tcGlsZSgmdm0sIGNoYXJTaXplKTsKK30KKworQUxXQVlTX0lOTElORSBpbnQg
UmVnRXhwOjptYXRjaElubGluZShWTSYgdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiYgb3ZlY3RvcikKK3sKKyNpZiBFTkFCTEUoUkVHRVhQ
X1RSQUNJTkcpCisgICAgbV9ydE1hdGNoQ2FsbENvdW50Kys7CisgICAgbV9ydE1hdGNoVG90YWxT
dWJqZWN0U3RyaW5nTGVuICs9IChkb3VibGUpKHMubGVuZ3RoKCkgLSBzdGFydE9mZnNldCk7Cisj
ZW5kaWYKKworICAgIEFTU0VSVChtX3N0YXRlICE9IFBhcnNlRXJyb3IpOworICAgIGNvbXBpbGVJ
Zk5lY2Vzc2FyeSh2bSwgcy5pczhCaXQoKSA/IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KTsK
KworICAgIGludCBvZmZzZXRWZWN0b3JTaXplID0gKG1fbnVtU3VicGF0dGVybnMgKyAxKSAqIDI7
CisgICAgb3ZlY3Rvci5yZXNpemUob2Zmc2V0VmVjdG9yU2l6ZSk7CisgICAgaW50KiBvZmZzZXRW
ZWN0b3IgPSBvdmVjdG9yLmRhdGEoKTsKKworICAgIGludCByZXN1bHQ7CisjaWYgRU5BQkxFKFlB
UlJfSklUKQorICAgIGlmIChtX3N0YXRlID09IEpJVENvZGUpIHsKKyAgICAgICAgaWYgKHMuaXM4
Qml0KCkpCisgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUuZXhlY3V0ZShzLmNo
YXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpLnN0YXJ0
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUuZXhl
Y3V0ZShzLmNoYXJhY3RlcnMxNigpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVj
dG9yKS5zdGFydDsKKyNpZiBFTkFCTEUoWUFSUl9KSVRfREVCVUcpCisgICAgICAgIG1hdGNoQ29t
cGFyZVdpdGhJbnRlcnByZXRlcihzLCBzdGFydE9mZnNldCwgb2Zmc2V0VmVjdG9yLCByZXN1bHQp
OworI2VuZGlmCisgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgcmVzdWx0ID0gWWFycjo6aW50
ZXJwcmV0KG1fcmVnRXhwQnl0ZWNvZGUuZ2V0KCksIHMsIHN0YXJ0T2Zmc2V0LCByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4ob2Zmc2V0VmVjdG9yKSk7CisKKyAgICAvLyBGSVhNRTogVGhlIFlB
UlIgZW5naW5lIHNob3VsZCBoYW5kbGUgdW5zaWduZWQgb3Igc2l6ZV90IGxlbmd0aCBtYXRjaGVz
LgorICAgIC8vIFRoZSBZQVJSIEludGVycHJldGVyIGlzICJ1bnNpZ25lZCIgY2xlYW4sIHdoaWxl
IHRoZSBZQVJSIEpJVCBoYXNuJ3QgYmVlbiBhZGRyZXNzZWQuCisgICAgLy8gVGhlIG9mZnNldCB2
ZWN0b3IgaGFuZGxpbmcgbmVlZHMgdG8gY2hhbmdlIGFzIHdlbGwuCisgICAgLy8gUmlnaHQgbm93
IHdlIGNvbnZlcnQgYSBtYXRjaCB3aGVyZSB0aGUgb2Zmc2V0cyBvdmVyZmxvd2VkIGludG8gbWF0
Y2ggZmFpbHVyZS4KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHBsYWNlcyBpbiBXZWJDb3JlIHRoYXQg
Y2FsbCB0aGUgaW50ZXJwcmV0ZXIgZGlyZWN0bHkgdGhhdCBuZWVkIHRvCisgICAgLy8gaGF2ZSB0
aGVpciBvZmZzZXRzIGNoYW5nZWQgdG8gaW50IGFzIHdlbGwuIFRoZXkgYXJlIHlhcnIvUmVndWxh
ckV4cHJlc3Npb24uY3BwCisgICAgLy8gYW5kIGluc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0
aWVzLmNwcAorICAgIGlmIChzLmxlbmd0aCgpID4gSU5UX01BWCkgeworICAgICAgICBib29sIG92
ZXJmbG93ZWQgPSBmYWxzZTsKKworICAgICAgICBpZiAocmVzdWx0IDwgLTEpCisgICAgICAgICAg
ICBvdmVyZmxvd2VkID0gdHJ1ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9
IG1fbnVtU3VicGF0dGVybnM7IGkrKykgeworICAgICAgICAgICAgaWYgKChvZmZzZXRWZWN0b3Jb
aSoyXSA8IC0xKSB8fCAoKG9mZnNldFZlY3RvcltpKjJdID49IDApICYmIChvZmZzZXRWZWN0b3Jb
aSoyKzFdIDwgLTEpKSkgeworICAgICAgICAgICAgICAgIG92ZXJmbG93ZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIG9mZnNldFZlY3RvcltpKjJdID0gLTE7CisgICAgICAgICAgICAgICAgb2Zm
c2V0VmVjdG9yW2kqMisxXSA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG92ZXJmbG93ZWQpCisgICAgICAgICAgICByZXN1bHQgPSAtMTsKKyAgICB9CisKKyAg
ICBBU1NFUlQocmVzdWx0ID49IC0xKTsKKworI2lmIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9HRU4K
KyAgICBSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6Z2V0KCktPm91dHB1dE9uZVRlc3Qo
dGhpcywgcywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKKyNlbmRpZgorCisj
aWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQorICAgIGlmIChyZXN1bHQgIT0gLTEpCisgICAgICAg
IG1fcnRNYXRjaEZvdW5kQ291bnQrKzsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5TWF0Y2hPbmx5
KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQoreworICAgIGlmIChoYXNDb2Rl
KCkpIHsKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCisgICAgICAgIGlmIChtX3N0YXRlICE9IEpJVENv
ZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6
Q2hhcjgpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzOEJpdENvZGVNYXRjaE9ubHkoKSkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6Q2hhcjE2KSAm
JiAobV9yZWdFeHBKSVRDb2RlLmhhczE2Qml0Q29kZU1hdGNoT25seSgpKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyNlbHNlCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIH0KKworICAgIGNv
bXBpbGVNYXRjaE9ubHkoJnZtLCBjaGFyU2l6ZSk7Cit9CisKK0FMV0FZU19JTkxJTkUgTWF0Y2hS
ZXN1bHQgUmVnRXhwOjptYXRjaElubGluZShWTSYgdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQpCit7CisjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQorICAgIG1fcnRN
YXRjaE9ubHlDYWxsQ291bnQrKzsKKyAgICBtX3J0TWF0Y2hPbmx5VG90YWxTdWJqZWN0U3RyaW5n
TGVuICs9IChkb3VibGUpKHMubGVuZ3RoKCkgLSBzdGFydE9mZnNldCk7CisjZW5kaWYKKworICAg
IEFTU0VSVChtX3N0YXRlICE9IFBhcnNlRXJyb3IpOworICAgIGNvbXBpbGVJZk5lY2Vzc2FyeU1h
dGNoT25seSh2bSwgcy5pczhCaXQoKSA/IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KTsKKwor
I2lmIEVOQUJMRShZQVJSX0pJVCkKKyAgICBpZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7CisgICAg
ICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHMuaXM4Qml0KCkgPworICAgICAgICAgICAgbV9yZWdF
eHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgo
KSkgOgorICAgICAgICAgICAgbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYo
KSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkpOworI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykK
KyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBtX3J0TWF0Y2hPbmx5Rm91bmRDb3Vu
dCsrOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmCisKKyAg
ICBpbnQgb2Zmc2V0VmVjdG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAyOworICAg
IGludCogb2Zmc2V0VmVjdG9yOworICAgIFZlY3RvcjxpbnQsIDMyPiBub25SZXR1cm5lZE92ZWN0
b3I7CisgICAgbm9uUmV0dXJuZWRPdmVjdG9yLnJlc2l6ZShvZmZzZXRWZWN0b3JTaXplKTsKKyAg
ICBvZmZzZXRWZWN0b3IgPSBub25SZXR1cm5lZE92ZWN0b3IuZGF0YSgpOworICAgIGludCByID0g
WWFycjo6aW50ZXJwcmV0KG1fcmVnRXhwQnl0ZWNvZGUuZ2V0KCksIHMsIHN0YXJ0T2Zmc2V0LCBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ob2Zmc2V0VmVjdG9yKSk7CisjaWYgUkVHRVhQX0ZV
TkNfVEVTVF9EQVRBX0dFTgorICAgIFJlZ0V4cEZ1bmN0aW9uYWxUZXN0Q29sbGVjdG9yOjpnZXQo
KS0+b3V0cHV0T25lVGVzdCh0aGlzLCBzLCBzdGFydE9mZnNldCwgb2Zmc2V0VmVjdG9yLCByZXN1
bHQpOworI2VuZGlmCisKKyAgICBpZiAociA+PSAwKSB7CisjaWYgRU5BQkxFKFJFR0VYUF9UUkFD
SU5HKQorICAgICAgICBtX3J0TWF0Y2hPbmx5Rm91bmRDb3VudCsrOworI2VuZGlmCisgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdChyLCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ob2Zmc2V0
VmVjdG9yKVsxXSk7CisgICAgfQorCisgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlsZWQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBSZWdFeHBJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5MCAr
MjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJh
eS5oIgogCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCBp
bmRleFByb3BlcnR5T2Zmc2V0ID0gMTAwOwotc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IGlu
cHV0UHJvcGVydHlPZmZzZXQgPSAxMDE7Ci0KLXN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmlu
aXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
c3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKLSAgICBpZiAodmVjdG9y
TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICB2b2lkKiB0ZW1wOwotICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwg
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0
cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJv
bUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBidXR0
ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwotICAgIGJ1dHRlcmZseS0+c2V0
UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOwotCi0gICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0
ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKLX0KLQotSlNBcnJheSog
Y3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KAotICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwKLSAg
ICB1bnNpZ25lZCBzdGFydE9mZnNldCwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKLXsKLSAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiY3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5Iik7Ci0g
ICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIAotICAgIFZlY3Rvcjxp
bnQsIDMyPiBzdWJwYXR0ZXJuUmVzdWx0czsKLSAgICBpbnQgcG9zaXRpb24gPSByZWdFeHAtPm1h
dGNoKHZtLCBpbnB1dC0+dmFsdWUoZXhlYyksIHN0YXJ0T2Zmc2V0LCBzdWJwYXR0ZXJuUmVzdWx0
cyk7Ci0gICAgaWYgKHBvc2l0aW9uID09IC0xKSB7Ci0gICAgICAgIHJlc3VsdCA9IE1hdGNoUmVz
dWx0OjpmYWlsZWQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmVz
dWx0LnN0YXJ0ID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LmVuZCA9IHN1YnBhdHRlcm5SZXN1bHRz
WzFdOwotICAgIAotICAgIEpTQXJyYXkqIGFycmF5OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGhhbmRsZSBhcnJheSBhbGxvY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5LgotICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxNDQKLSAgICAKLSAgICBp
ZiAoVU5MSUtFTFkoZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkpKSB7Ci0gICAgICAg
IGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0
LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
ICsgMSk7Ci0gICAgICAgIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBq
c1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQg
LSByZXN1bHQuc3RhcnQpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh1bnNpZ25lZCBudW1TdWJw
YXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOwotICAgICAgICAgICAgICAg
IGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlu
cHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1h
dGNoZXNBcnJheSh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUo
KSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFycmF5KTsKLSAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAs
IGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVu
ZCAtIHJlc3VsdC5zdGFydCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
KSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5z
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSBzdWJwYXR0ZXJuUmVzdWx0c1sy
ICogaV07Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICAgICAg
ICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vi
c3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICog
aSArIDFdIC0gc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpz
VW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgYXJyYXktPnB1dERpcmVjdCh2bSwgaW5kZXhQcm9wZXJ0eU9mZnNl
dCwganNOdW1iZXIocmVzdWx0LnN0YXJ0KSk7Ci0gICAgYXJyYXktPnB1dERpcmVjdCh2bSwgaW5w
dXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOwotCi0gICAgcmV0dXJuIGFycmF5OwotfQotCiBKU0Fy
cmF5KiBjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTEzOSw4ICs1Nyw4IEBAIEpTQXJyYXkqIGNyZWF0ZUVt
cHR5UmVnRXhwTWF0Y2hlc0FycmF5KEoKICAgICAgICAgfQogICAgIH0KIAotICAgIGFycmF5LT5w
dXREaXJlY3Qodm0sIGluZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKC0xKSk7Ci0gICAgYXJy
YXktPnB1dERpcmVjdCh2bSwgaW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOworICAgIGFycmF5
LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQsIGpz
TnVtYmVyKC0xKSk7CisgICAgYXJyYXktPnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5
SW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOwogICAgIHJldHVybiBhcnJheTsKIH0KIApAQCAt
MTQ5LDkgKzY3LDkgQEAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlSW1wbChWTQog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKTsKICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQ7CiAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+aW5kZXgsIDAsIG9mZnNl
dCk7Ci0gICAgQVNTRVJUKG9mZnNldCA9PSBpbmRleFByb3BlcnR5T2Zmc2V0KTsKKyAgICBBU1NF
UlQob2Zmc2V0ID09IFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQpOwogICAg
IHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUsIHZtLnByb3BlcnR5TmFtZXMtPmlucHV0LCAwLCBvZmZzZXQpOwotICAgIEFTU0VSVChvZmZz
ZXQgPT0gaW5wdXRQcm9wZXJ0eU9mZnNldCk7CisgICAgQVNTRVJUKG9mZnNldCA9PSBSZWdFeHBN
YXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5T2Zmc2V0KTsKICAgICByZXR1cm4gc3RydWN0dXJlOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDE3ICsy
MCw5NiBAQAogI2lmbmRlZiBSZWdFeHBNYXRjaGVzQXJyYXlfaAogI2RlZmluZSBSZWdFeHBNYXRj
aGVzQXJyYXlfaAogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKKyNpbmNsdWRlICJSZWdFeHBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJy
YXkoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIFJlZ0V4cCosIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCBNYXRjaFJlc3VsdCYpOworc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zm
c2V0IFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQgPSAxMDA7CitzdGF0aWMg
Y29uc3QgUHJvcGVydHlPZmZzZXQgUmVnRXhwTWF0Y2hlc0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNl
dCA9IDEwMTsKKworQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVk
UmVnRXhwTWF0Y2hlc0FycmF5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVk
IGluaXRpYWxMZW5ndGgpCit7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgo
QkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICBpZiAodmVjdG9yTGVuZ3RoID4g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB2b2lk
KiB0ZW1wOworICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVt
cCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBidXR0ZXJmbHktPnNl
dFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVu
Z3RoKGluaXRpYWxMZW5ndGgpOworCisgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZVdpdGhCdXR0
ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKK30KKworQUxXQVlTX0lOTElORSBKU0Fy
cmF5KiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIGNvbnN0IFN0cmluZyYgaW5wdXRWYWx1
ZSwKKyAgICBSZWdFeHAqIHJlZ0V4cCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIE1hdGNoUmVzdWx0
JiByZXN1bHQpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oImNyZWF0ZVJl
Z0V4cE1hdGNoZXNBcnJheSIpOworICAgIAorICAgIFZlY3RvcjxpbnQsIDMyPiBzdWJwYXR0ZXJu
UmVzdWx0czsKKyAgICBpbnQgcG9zaXRpb24gPSByZWdFeHAtPm1hdGNoSW5saW5lKHZtLCBpbnB1
dFZhbHVlLCBzdGFydE9mZnNldCwgc3VicGF0dGVyblJlc3VsdHMpOworICAgIGlmIChwb3NpdGlv
biA9PSAtMSkgeworICAgICAgICByZXN1bHQgPSBNYXRjaFJlc3VsdDo6ZmFpbGVkKCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJlc3VsdC5zdGFydCA9IHBvc2l0aW9u
OworICAgIHJlc3VsdC5lbmQgPSBzdWJwYXR0ZXJuUmVzdWx0c1sxXTsKKyAgICAKKyAgICBKU0Fy
cmF5KiBhcnJheTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYW5kbGUgYXJyYXkgYWxs
b2NhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ0CisgICAgCisgICAgaWYgKFVOTElLRUxZKGdsb2JhbE9i
amVjdC0+aXNIYXZpbmdBQmFkVGltZSgpKSkgeworICAgICAgICBhcnJheSA9IEpTQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5
U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOworICAgICAgICAKKyAg
ICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJzdHJpbmdPZlJlc29sdmVk
KHZtLCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAodW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSByZWdFeHAtPm51
bVN1YnBhdHRlcm5zKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0g
bnVtU3VicGF0dGVybnM7ICsraSkgeworICAgICAgICAgICAgICAgIGludCBzdGFydCA9IHN1YnBh
dHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkKKyAg
ICAgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwgSlNSb3BlU3Ry
aW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgc3RhcnQsIHN1YnBhdHRl
cm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNVbmRlZmlu
ZWQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBh
cnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkodm0sIGdsb2Jh
bE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0
dGVybnMoKSArIDEpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhcnJheSk7CisgICAgICAgIAor
ICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1N1YnN0cmluZ09mUmVzb2x2
ZWQodm0sIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpLCBB
cnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgCisgICAgICAgIGlmICh1bnNpZ25lZCBudW1T
dWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7CisgICAgICAgICAg
ICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOworICAgICAgICAgICAg
ICAgIGlmIChzdGFydCA+PSAwKQorICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6
ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0s
IGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSwgQXJy
YXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdp
dGhDb250aWd1b3VzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGFy
cmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQs
IGpzTnVtYmVyKHJlc3VsdC5zdGFydCkpOworICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4
cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKKworICAgIHJldHVybiBh
cnJheTsKK30KKwogaW5saW5lIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJp
bmcsIFJlZ0V4cCogcmVnRXhwLCB1bnNpZ25lZCBzdGFydE9mZnNldCkKIHsKICAgICBNYXRjaFJl
c3VsdCBpZ25vcmVkUmVzdWx0OwotICAgIHJldHVybiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXko
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJpbmcsIHJlZ0V4cCwgc3RhcnRPZmZzZXQsIGlnbm9yZWRS
ZXN1bHQpOworICAgIHJldHVybiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkoZ2xvYmFsT2JqZWN0
LT52bSgpLCBnbG9iYWxPYmplY3QsIHN0cmluZywgc3RyaW5nLT52YWx1ZShleGVjKSwgcmVnRXhw
LCBzdGFydE9mZnNldCwgaWdub3JlZFJlc3VsdCk7CiB9CiBKU0FycmF5KiBjcmVhdGVFbXB0eVJl
Z0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgUmVnRXhwKik7CiBT
dHJ1Y3R1cmUqIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKKyNpbmNsdWRlICJSZWdFeHBPYmplY3RJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90eXBlLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0xNTksNzcgKzE2MCwxNSBAQCB2b2lkIFJlZ0V4cE9i
amVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlCiAgICAgQmFzZTo6cHV0KGNlbGwsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdl
dExhc3RJbmRleEFzVW5zaWduZWQoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBSZWdFeHBPYmplY3Qq
IHJlZ0V4cE9iamVjdCwgY29uc3QgU3RyaW5nJiBpbnB1dCkKLXsKLSAgICBKU1ZhbHVlIGpzTGFz
dEluZGV4ID0gcmVnRXhwT2JqZWN0LT5nZXRMYXN0SW5kZXgoKTsKLSAgICB1bnNpZ25lZCBsYXN0
SW5kZXg7Ci0gICAgaWYgKExJS0VMWShqc0xhc3RJbmRleC5pc1VJbnQzMigpKSkgewotICAgICAg
ICBsYXN0SW5kZXggPSBqc0xhc3RJbmRleC5hc1VJbnQzMigpOwotICAgICAgICBpZiAobGFzdElu
ZGV4ID4gaW5wdXQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0TGFz
dEluZGV4KGV4ZWMsIDApOwotICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG91YmxlIGRvdWJsZUxhc3RJbmRleCA9IGpzTGFzdElu
ZGV4LnRvSW50ZWdlcihleGVjKTsKLSAgICAgICAgaWYgKGRvdWJsZUxhc3RJbmRleCA8IDAgfHwg
ZG91YmxlTGFzdEluZGV4ID4gaW5wdXQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHJlZ0V4cE9i
amVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFY
OwotICAgICAgICB9Ci0gICAgICAgIGxhc3RJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
b3VibGVMYXN0SW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gbGFzdEluZGV4OwotfQotCiBKU1Zh
bHVlIFJlZ0V4cE9iamVjdDo6ZXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgUmVnRXhwKiByZWdFeHAgPSB0
aGlzLT5yZWdFeHAoKTsKLSAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3Ig
PSBnbG9iYWxPYmplY3QtPnJlZ0V4cENvbnN0cnVjdG9yKCk7Ci0gICAgU3RyaW5nIGlucHV0ID0g
c3RyaW5nLT52YWx1ZShleGVjKTsgLy8gRklYTUU6IEhhbmRsZSBlcnJvcnMuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxNDUKLSAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0KLSAgICBpZiAoIXJlZ0V4cC0+Z2xvYmFsKCkpIHsKLSAgICAgICAgTWF0
Y2hSZXN1bHQgcmVzdWx0OwotICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNyZWF0ZVJlZ0V4cE1h
dGNoZXNBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIHN0cmluZywgcmVnRXhwLCAwLCByZXN1bHQp
OwotICAgICAgICBpZiAoIWFycmF5KQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAg
ICAgICByZWdFeHBDb25zdHJ1Y3Rvci0+cmVjb3JkTWF0Y2godm0sIHJlZ0V4cCwgc3RyaW5nLCBy
ZXN1bHQpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGFz
dEluZGV4ID0gZ2V0TGFzdEluZGV4QXNVbnNpZ25lZChleGVjLCB0aGlzLCBpbnB1dCk7Ci0gICAg
aWYgKGxhc3RJbmRleCA9PSBVSU5UX01BWCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAg
IAotICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKLSAgICBKU0FycmF5KiBhcnJheSA9Ci0gICAgICAg
IGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIHN0cmluZywgcmVn
RXhwLCBsYXN0SW5kZXgsIHJlc3VsdCk7Ci0gICAgaWYgKCFhcnJheSkgewotICAgICAgICBzZXRM
YXN0SW5kZXgoZXhlYywgMCk7Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0gICAg
c2V0TGFzdEluZGV4KGV4ZWMsIHJlc3VsdC5lbmQpOwotICAgIHJlZ0V4cENvbnN0cnVjdG9yLT5y
ZWNvcmRNYXRjaCh2bSwgcmVnRXhwLCBzdHJpbmcsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIGFycmF5
OworICAgIHJldHVybiBleGVjSW5saW5lKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RyaW5nKTsKIH0K
IAogLy8gU2hhcmVkIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgdGVzdCBhbmQgZXhlYy4KIE1hdGNo
UmVzdWx0IFJlZ0V4cE9iamVjdDo6bWF0Y2goRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKQogewotICAgIFJlZ0V4cCogcmVnRXhw
ID0gdGhpcy0+cmVnRXhwKCk7Ci0gICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVj
dG9yID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBDb25zdHJ1Y3RvcigpOwotICAgIFN0cmluZyBpbnB1
dCA9IHN0cmluZy0+dmFsdWUoZXhlYyk7IC8vIEZJWE1FOiBIYW5kbGUgZXJyb3JzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ1Ci0gICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIGlmICghcmVnRXhwLT5nbG9iYWwoKSkKLSAgICAgICAgcmV0
dXJuIHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2godm0sIHJlZ0V4cCwgc3RyaW5nLCBp
bnB1dCwgMCk7Ci0KLSAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSBnZXRMYXN0SW5kZXhBc1Vuc2ln
bmVkKGV4ZWMsIHRoaXMsIGlucHV0KTsKLSAgICBpZiAobGFzdEluZGV4ID09IFVJTlRfTUFYKQot
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxlZCgpOwotICAgIAotICAgIE1hdGNoUmVz
dWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2godm0sIHJlZ0V4cCwg
c3RyaW5nLCBpbnB1dCwgbGFzdEluZGV4KTsKLSAgICBzZXRMYXN0SW5kZXgoZXhlYywgcmVzdWx0
LmVuZCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbWF0Y2hJbmxpbmUoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdHJpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAx
OTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9v
bCB0ZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNT
dHJpbmcqIHN0cmluZykgeyByZXR1cm4gISFtYXRjaChleGVjLCBnbG9iYWxPYmplY3QsIHN0cmlu
Zyk7IH0KKyAgICBib29sIHRlc3RJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKSB7IHJldHVybiAhIW1hdGNoSW5saW5l
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RyaW5nKTsgfQogICAgIEpTVmFsdWUgZXhlYyhFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CisgICAgSlNWYWx1ZSBleGVjSW5saW5l
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKIAogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xMDMsNiAr
MTA1LDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIE1hdGNoUmVzdWx0IG1hdGNoKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICBNYXRjaFJlc3VsdCBt
YXRjaElubGluZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CiAKICAg
ICBXcml0ZUJhcnJpZXI8UmVnRXhwPiBtX3JlZ0V4cDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4gbV9sYXN0SW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTEyIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4
LCAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIFJlZ0V4cE9iamVjdElubGluZXNfaAor
I2RlZmluZSBSZWdFeHBPYmplY3RJbmxpbmVzX2gKKworI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIK
KyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNs
dWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJSZWdF
eHBDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJheS5oIgorI2luY2x1
ZGUgIlJlZ0V4cE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElORSB1
bnNpZ25lZCBnZXRSZWdFeHBPYmplY3RMYXN0SW5kZXhBc1Vuc2lnbmVkKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgUmVnRXhwT2JqZWN0KiByZWdFeHBPYmplY3QsIGNvbnN0IFN0cmluZyYgaW5wdXQp
Cit7CisgICAgSlNWYWx1ZSBqc0xhc3RJbmRleCA9IHJlZ0V4cE9iamVjdC0+Z2V0TGFzdEluZGV4
KCk7CisgICAgdW5zaWduZWQgbGFzdEluZGV4OworICAgIGlmIChMSUtFTFkoanNMYXN0SW5kZXgu
aXNVSW50MzIoKSkpIHsKKyAgICAgICAgbGFzdEluZGV4ID0ganNMYXN0SW5kZXguYXNVSW50MzIo
KTsKKyAgICAgICAgaWYgKGxhc3RJbmRleCA+IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgICAg
ICByZWdFeHBPYmplY3QtPnNldExhc3RJbmRleChleGVjLCAwKTsKKyAgICAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGRvdWJsZSBkb3Vi
bGVMYXN0SW5kZXggPSBqc0xhc3RJbmRleC50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIGlmIChk
b3VibGVMYXN0SW5kZXggPCAwIHx8IGRvdWJsZUxhc3RJbmRleCA+IGlucHV0Lmxlbmd0aCgpKSB7
CisgICAgICAgICAgICByZWdFeHBPYmplY3QtPnNldExhc3RJbmRleChleGVjLCAwKTsKKyAgICAg
ICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICAgICAgfQorICAgICAgICBsYXN0SW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZG91YmxlTGFzdEluZGV4KTsKKyAgICB9CisgICAgcmV0dXJu
IGxhc3RJbmRleDsKK30KKworSlNWYWx1ZSBSZWdFeHBPYmplY3Q6OmV4ZWNJbmxpbmUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5n
KQoreworICAgIFJlZ0V4cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7CisgICAgUmVnRXhwQ29u
c3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBDb25zdHJ1
Y3RvcigpOworICAgIFN0cmluZyBpbnB1dCA9IHN0cmluZy0+dmFsdWUoZXhlYyk7IC8vIEZJWE1F
OiBIYW5kbGUgZXJyb3JzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU1MTQ1CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgYm9vbCBnbG9i
YWwgPSByZWdFeHAtPmdsb2JhbCgpOworCisgICAgdW5zaWduZWQgbGFzdEluZGV4OworICAgIGlm
IChnbG9iYWwpIHsKKyAgICAgICAgbGFzdEluZGV4ID0gZ2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4
QXNVbnNpZ25lZChleGVjLCB0aGlzLCBpbnB1dCk7CisgICAgICAgIGlmIChsYXN0SW5kZXggPT0g
VUlOVF9NQVgpCisgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGxhc3RJbmRleCA9IDA7CisgICAgCisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OworICAgIEpT
QXJyYXkqIGFycmF5ID0gY3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCBnbG9iYWxPYmplY3Qs
IHN0cmluZywgaW5wdXQsIHJlZ0V4cCwgMCwgcmVzdWx0KTsKKyAgICBpZiAoIWFycmF5KSB7Cisg
ICAgICAgIGlmIChnbG9iYWwpCisgICAgICAgICAgICBzZXRMYXN0SW5kZXgoZXhlYywgMCk7Cisg
ICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICB9CisgICAgaWYgKGdsb2JhbCkKKyAgICAgICAg
c2V0TGFzdEluZGV4KGV4ZWMsIHJlc3VsdC5lbmQpOworICAgIHJlZ0V4cENvbnN0cnVjdG9yLT5y
ZWNvcmRNYXRjaCh2bSwgcmVnRXhwLCBzdHJpbmcsIHJlc3VsdCk7CisgICAgcmV0dXJuIGFycmF5
OworfQorCisvLyBTaGFyZWQgaW1wbGVtZW50YXRpb24gdXNlZCBieSB0ZXN0IGFuZCBleGVjLgor
TWF0Y2hSZXN1bHQgUmVnRXhwT2JqZWN0OjptYXRjaElubGluZSgKKyAgICBFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCit7Cisg
ICAgUmVnRXhwKiByZWdFeHAgPSB0aGlzLT5yZWdFeHAoKTsKKyAgICBSZWdFeHBDb25zdHJ1Y3Rv
ciogcmVnRXhwQ29uc3RydWN0b3IgPSBnbG9iYWxPYmplY3QtPnJlZ0V4cENvbnN0cnVjdG9yKCk7
CisgICAgU3RyaW5nIGlucHV0ID0gc3RyaW5nLT52YWx1ZShleGVjKTsgLy8gRklYTUU6IEhhbmRs
ZSBlcnJvcnMuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxNDUK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgaWYgKCFyZWdFeHAtPmdsb2Jh
bCgpKQorICAgICAgICByZXR1cm4gcmVnRXhwQ29uc3RydWN0b3ItPnBlcmZvcm1NYXRjaCh2bSwg
cmVnRXhwLCBzdHJpbmcsIGlucHV0LCAwKTsKKworICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IGdl
dFJlZ0V4cE9iamVjdExhc3RJbmRleEFzVW5zaWduZWQoZXhlYywgdGhpcywgaW5wdXQpOworICAg
IGlmIChsYXN0SW5kZXggPT0gVUlOVF9NQVgpCisgICAgICAgIHJldHVybiBNYXRjaFJlc3VsdDo6
ZmFpbGVkKCk7CisgICAgCisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0ID0gcmVnRXhwQ29uc3RydWN0
b3ItPnBlcmZvcm1NYXRjaCh2bSwgcmVnRXhwLCBzdHJpbmcsIGlucHV0LCBsYXN0SW5kZXgpOwor
ICAgIHNldExhc3RJbmRleChleGVjLCByZXN1bHQuZW5kKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFJlZ0V4cE9iamVjdElubGluZXNf
aAorCg==
</data>
<flag name="review"
          id="297908"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>273316</attachid>
            <date>2016-03-08 12:32:38 -0800</date>
            <delta_ts>2016-03-08 12:32:38 -0800</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>43854</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk3Nzg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU4IEBA
CisyMDE2LTAzLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UmVnZXhwIG1hdGNoaW5nIHNob3VsZCBpbmN1ciBsZXNzIGNhbGwgb3ZlcmhlYWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NTE4MQorCisgICAgICAg
IFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdhcmVuLgorCisgICAgICAgIFByZXZpb3VzbHkgd2UgaGFk
IERGRy9GVEwgY29kZSBjYWxsIGludG8gdGhlIERGR09wZXJhdGlvbiwgd2hpY2ggdGhlbiBjYWxs
ZWQgaW4gdG8KKyAgICAgICAgUmVnRXhwT2JqZWN0LCB3aGljaCB0aGVuIGNhbGxlZCBpbnRvIGNy
ZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheSwgd2hpY2ggdGhlbiBjYWxsZWQgaW50bworICAgICAgICBS
ZWdFeHAsIHdoaWNoIHRoZW4gY2FsbGVkIHRoZSBjb2RlIGdlbmVyYXRlZCBieSBZYXJyLgorCisg
ICAgICAgIE5vdyB3ZSBoYXZlIERGRy9GVEwgY29kZSBjYWxsIGludG8gdGhlIERGR09wZXJhdGlv
biwgd2hpY2ggZG9lcyBhbGwgb2YgdGhlIHRoaW5ncyBhbmQgY2FsbHMKKyAgICAgICAgaW50byBj
b2RlIGdlbmVyYXRlZCBieSBZYXJyLgorCisgICAgICAgIFRoaXMgaXMgYW5vdGhlciB0aW55IE9j
dGFuZS9yZWdleHAgc3BlZWQtdXAuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OnJlZ0V4cEZsYWdzKToK
KyAgICAgICAgKEpTQzo6UmVnRXhwOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6UmVnRXhwOjpt
YXRjaCk6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seSk6CisgICAgICAg
IChKU0M6OlJlZ0V4cDo6ZGVsZXRlQ29kZSk6CisgICAgICAgIChKU0M6OlJlZ0V4cEZ1bmN0aW9u
YWxUZXN0Q29sbGVjdG9yOjpjbGVhclJlZ0V4cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlJl
Z0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6UmVnRXhw
Ojpjb21waWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRp
bWUvUmVnRXhwLmg6CisgICAgICAgICogcnVudGltZS9SZWdFeHBJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6Y2xlYXJSZWdFeHAp
OgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGVJZk5lY2Vzc2FyeSk6CisgICAgICAgIChK
U0M6OlJlZ0V4cDo6bWF0Y2hJbmxpbmUpOgorICAgICAgICAoSlNDOjpSZWdFeHA6OmNvbXBpbGVJ
Zk5lY2Vzc2FyeU1hdGNoT25seSk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBNYXRjaGVzQXJy
YXkuY3BwOgorICAgICAgICAoSlNDOjpjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheSk6Cisg
ICAgICAgIChKU0M6OmNyZWF0ZVN0cnVjdHVyZUltcGwpOgorICAgICAgICAoSlNDOjp0cnlDcmVh
dGVVbmluaXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6Y3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L1JlZ0V4cE1hdGNoZXNBcnJheS5oOgorICAgICAgICAoSlNDOjp0cnlDcmVhdGVVbmluaXRpYWxp
emVkUmVnRXhwTWF0Y2hlc0FycmF5KToKKyAgICAgICAgKEpTQzo6Y3JlYXRlUmVnRXhwTWF0Y2hl
c0FycmF5KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OlJlZ0V4cE9iamVjdDo6cHV0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjpleGVj
KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0OjptYXRjaCk6CisgICAgICAgIChKU0M6Omdl
dExhc3RJbmRleEFzVW5zaWduZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvUmVnRXhw
T2JqZWN0Lmg6CisgICAgICAgIChKU0M6OlJlZ0V4cE9iamVjdDo6Z2V0TGFzdEluZGV4KToKKyAg
ICAgICAgKEpTQzo6UmVnRXhwT2JqZWN0Ojp0ZXN0KToKKyAgICAgICAgKEpTQzo6UmVnRXhwT2Jq
ZWN0Ojp0ZXN0SW5saW5lKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdElubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OmdldFJlZ0V4cE9iamVjdExhc3RJbmRleEFzVW5zaWdu
ZWQpOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmV4ZWNJbmxpbmUpOgorICAgICAgICAo
SlNDOjpSZWdFeHBPYmplY3Q6Om1hdGNoSW5saW5lKToKKwogMjAxNi0wMy0wOCAgTWljaGFlbCBT
YWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBbRVM2XSBSZWd1bGFyIEV4cHJl
c3Npb24gY2Fub25pY2FsaXphdGlvbiB0YWJsZXMgZm9yIFVuaWNvZGUgbmVlZCB0byBiZSB1cGRh
dGVkIHRvIHVzZSBVbmljb2RlIENhc2VGb2xkaW5nLnR4dApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00ODYsNiArNDg2LDggQEAKIAkJMEY3QjI5NEIxNEMzQ0QyRjAwN0MzREIxIC8qIERGR0NhcGFi
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZEODJFMUYxNDE3MkMyRjAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5oICovOyB9OwogCQkw
RjdCMjk0RDE0QzNDRDRDMDA3QzNEQjEgLyogREZHQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc3RTE0NjlFQkM0MDBDRjI0NDIgLyog
REZHQ29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjdDMTFBQzFCQzM4NjJDMDBD
NzRDREIgLyogQ29weUJhcnJpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjdDMzlGQjFDOEY2MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3QzM5
RkExQzhGNjI5MzAwNDgwMTUxIC8qIFJlZ0V4cElubGluZXMuaCAqLzsgfTsKKwkJMEY3QzM5RkQx
QzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGN0MzOUZDMUM4RjY1OTUwMDQ4MDE1MSAv
KiBSZWdFeHBPYmplY3RJbmxpbmVzLmggKi87IH07CiAJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0
NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGODAyM0U5MTYxMzgzMjMwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjgzMzVCNzE2MzlDMUU2
MDAxNDQzQjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNDE2MzlDMUUzMDAxNDQzQjUgLyog
QXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGODMzNUI4MTYzOUMxRUEwMDE0
NDNCNSAvKiBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgzMzVCNTE2MzlDMUUzMDAxNDQzQjUgLyogQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yNjM3LDYgKzI2MzksOCBAQAogCQkwRjc5MDg1MzE5QTI5MEIyMDBGNjMx
MEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwOyBw
YXRoID0gZGZnL0RGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY3OTA4NTQxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVy
ZVJlZ2lzdHJhdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmg7IHBhdGggPSBkZmcvREZHU3RydWN0dXJlUmVn
aXN0cmF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3QzExQUMx
QkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvcHlCYXJyaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
N0MzOUZBMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ0V4cElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY3QzM5RkMxQzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnRXhwT2JqZWN0SW5saW5lcy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgwMjNFOTE2MTM4MzIzMDBBMEJBNDUg
LyogQnlWYWxJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5VmFsSW5m
by5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjgzMzVCNDE2MzlDMUUzMDAxNDQz
QjUgLyogQXJyYXlBbGxvY2F0aW9uUHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBBcnJheUFsbG9jYXRpb25Qcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY4MzM1QjUxNjM5QzFFMzAwMTQ0M0I1IC8qIEFycmF5QWxsb2NhdGlv
blByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlBbGxvY2F0
aW9uUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTg3OSwxMSArNTg4
MywxMyBAQAogCQkJCTg2Rjc1RUZDMTUxQzA2MkYwMDdDOUJBMyAvKiBSZWdFeHBDYWNoZWRSZXN1
bHQuaCAqLywKIAkJCQlCQ0QyMDJCRDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwQ29uc3RydWN0
b3IuY3BwICovLAogCQkJCUJDRDIwMkJFMEUxNzA2QTcwMDJDN0U4MiAvKiBSZWdFeHBDb25zdHJ1
Y3Rvci5oICovLAorCQkJCTBGN0MzOUZBMUM4RjYyOTMwMDQ4MDE1MSAvKiBSZWdFeHBJbmxpbmVz
LmggKi8sCiAJCQkJQTE3MTJCNDAxMUM3QjIzNTAwN0E1MzE1IC8qIFJlZ0V4cEtleS5oICovLAog
CQkJCTg2Rjc1RUZEMTUxQzA2MkYwMDdDOUJBMyAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwICov
LAogCQkJCTkzQ0VEREZCMEVBOTFFRTYwMDI1OEVCRSAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuaCAq
LywKIAkJCQlGNjkyQTg3QjAyNTU1OTdEMDFGRjYwRjcgLyogUmVnRXhwT2JqZWN0LmNwcCAqLywK
IAkJCQlGNjkyQTg3QzAyNTU1OTdEMDFGRjYwRjcgLyogUmVnRXhwT2JqZWN0LmggKi8sCisJCQkJ
MEY3QzM5RkMxQzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCAqLywKIAkJ
CQlCQ0QyMDJCRjBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmNwcCAqLywKIAkJ
CQlCQ0QyMDJDMDBFMTcwNkE3MDAyQzdFODIgLyogUmVnRXhwUHJvdG90eXBlLmggKi8sCiAJCQkJ
MEZCN0YzOTExNUVEOEUzODAwRjE2N0IyIC8qIFJlamVjdC5oICovLApAQCAtNzIxMSw2ICs3MjE3
LDcgQEAKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRG
aW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QkZGM0MwMTc5ODY4OTQwMDAyRjQ2MiAv
KiBERkdGaWx0cmF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjdDMzlGQjFDOEY2
MjkzMDA0ODAxNTEgLyogUmVnRXhwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3
NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDMTYxNTFDNUQ0RjAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUQzMzk3MTdGRkM0RTYwMDczQzJCQyAvKiBERkdGbHVzaGVkQXQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNzkzMCw2ICs3OTM3LDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJF
OTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0
MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY3QzM5
RkQxQzhGNjU5NTAwNDgwMTUxIC8qIFJlZ0V4cE9iamVjdElubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVy
Q2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBT
b3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYyNCw3ICs2MjQsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblJlCiAgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwogICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKLSAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlZ0V4cE9iamVjdC0+ZXhlYyhleGVjLCBnbG9iYWxPYmplY3QsIGFyZ3VtZW50KSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWNJbmxpbmUoZXhl
YywgZ2xvYmFsT2JqZWN0LCBhcmd1bWVudCkpOwogfQogICAgICAgICAKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZ0V4cE9iamVjdCogcmVnRXhwT2JqZWN0LCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCkBAIC02MzcsNyArNjM3LDcgQEAgRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25SZQogICAgIEpTU3RyaW5nKiBpbnB1dCA9IGFy
Z3VtZW50LnRvU3RyaW5nT3JOdWxsKGV4ZWMpOwogICAgIGlmICghaW5wdXQpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShyZWdFeHBPYmplY3QtPmV4ZWMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1dCkpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVnRXhwT2JqZWN0LT5leGVjSW5saW5lKGV4ZWMs
IGdsb2JhbE9iamVjdCwgaW5wdXQpKTsKIH0KICAgICAgICAgCiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cEV4ZWNHZW5lcmljKEV4ZWNTdGF0ZSogZXhlYywgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKQEAgLTY2Miw3ICs2NjIsNyBAQCBzaXplX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBUZXN0CiAgICAgVk0mIHZtID0gZ2xvYmFsT2Jq
ZWN0LT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsK
IAotICAgIHJldHVybiByZWdFeHBPYmplY3QtPnRlc3QoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1
dCk7CisgICAgcmV0dXJuIHJlZ0V4cE9iamVjdC0+dGVzdElubGluZShleGVjLCBnbG9iYWxPYmpl
Y3QsIGlucHV0KTsKIH0KIAogc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVz
dChFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFJlZ0V4cE9i
amVjdCogcmVnRXhwT2JqZWN0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJndW1lbnQpCkBAIC02
NzUsNyArNjc1LDcgQEAgc2l6ZV90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdAog
ICAgIEpTU3RyaW5nKiBpbnB1dCA9IGFyZ3VtZW50LnRvU3RyaW5nT3JOdWxsKGV4ZWMpOwogICAg
IGlmICghaW5wdXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gcmVnRXhwT2Jq
ZWN0LT50ZXN0KGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5wdXQpOworICAgIHJldHVybiByZWdFeHBP
YmplY3QtPnRlc3RJbmxpbmUoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbnB1dCk7CiB9CiAKIHNpemVf
dCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3RHZW5lcmljKEV4ZWNTdGF0ZSogZXhl
YywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJh
c2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcmd1bWVudCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEsIDIwMDQgSGFycmkgUG9ydGVu
IChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCwgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5
IFRvcmNoIE1vYmlsZSwgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAxMCBQZXRlciBWYXJnYSAo
cHZhcmdhQGluZi51LXN6ZWdlZC5odSksIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgpAQCAtMjYs
MTggKzI2LDExIEBACiAjaW5jbHVkZSAiTGV4ZXIuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAjaW5jbHVkZSAiUmVnRXhwQ2FjaGUuaCIKKyNpbmNsdWRlICJSZWdFeHBJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiWWFyci5oIgogI2luY2x1ZGUgIllhcnJKSVQuaCIKICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCi0jZGVmaW5lIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9HRU4gMAotCi0jaWYg
UkVHRVhQX0ZVTkNfVEVTVF9EQVRBX0dFTgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8
c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZW5kaWYKLQogbmFtZXNwYWNlIEpTQyB7
CiAKIGNvbnN0IENsYXNzSW5mbyBSZWdFeHA6OnNfaW5mbyA9IHsgIlJlZ0V4cCIsIDAsIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoUmVnRXhwKSB9OwpAQCAtODEsMzMgKzc0LDYgQEAgUmVnRXhwRmxh
Z3MgcmVnRXhwRmxhZ3MoY29uc3QgU3RyaW5nJiBzdAogfQogCiAjaWYgUkVHRVhQX0ZVTkNfVEVT
VF9EQVRBX0dFTgotY2xhc3MgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3IgewotICAgIC8v
IFRoaXMgY2xhc3MgaXMgbm90IHRocmVhZCBzYWZlLgotcHJvdGVjdGVkOgotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBzX2ZpbGVOYW1lOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZ0V4
cEZ1bmN0aW9uYWxUZXN0Q29sbGVjdG9yKiBnZXQoKTsKLQotICAgIH5SZWdFeHBGdW5jdGlvbmFs
VGVzdENvbGxlY3RvcigpOwotCi0gICAgdm9pZCBvdXRwdXRPbmVUZXN0KFJlZ0V4cCosIFN0cmlu
ZywgaW50LCBpbnQqLCBpbnQpOwotICAgIHZvaWQgY2xlYXJSZWdFeHAoUmVnRXhwKiByZWdFeHAp
Ci0gICAgewotICAgICAgICBpZiAocmVnRXhwID09IG1fbGFzdFJlZ0V4cCkKLSAgICAgICAgICAg
IG1fbGFzdFJlZ0V4cCA9IDA7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIFJlZ0V4cEZ1bmN0aW9u
YWxUZXN0Q29sbGVjdG9yKCk7Ci0KLSAgICB2b2lkIG91dHB1dEVzY2FwZWRTdHJpbmcoY29uc3Qg
U3RyaW5nJiwgYm9vbCBlc2NhcGVTbGFzaCA9IGZhbHNlKTsKLQotICAgIHN0YXRpYyBSZWdFeHBG
dW5jdGlvbmFsVGVzdENvbGxlY3Rvciogc19pbnN0YW5jZTsKLSAgICBGSUxFKiBtX2ZpbGU7Ci0g
ICAgUmVnRXhwKiBtX2xhc3RSZWdFeHA7Ci19OwotCiBjb25zdCBjaGFyKiBjb25zdCBSZWdFeHBG
dW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6c19maWxlTmFtZSA9ICIvdG1wL1JlZ0V4cFRlc3RzRGF0
YSI7CiBSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3RvciogUmVnRXhwRnVuY3Rpb25hbFRlc3RD
b2xsZWN0b3I6OnNfaW5zdGFuY2UgPSAwOwogCkBAIC0zMjAsODkgKzI4Niw5IEBAIHZvaWQgUmVn
RXhwOjpjb21waWxlKFZNKiB2bSwgWWFycjo6WWFyckMKICAgICBtX3JlZ0V4cEJ5dGVjb2RlID0g
WWFycjo6Ynl0ZUNvbXBpbGUocGF0dGVybiwgJnZtLT5tX3JlZ0V4cEFsbG9jYXRvcik7CiB9CiAK
LXZvaWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnkoVk0mIHZtLCBZYXJyOjpZYXJyQ2hhclNp
emUgY2hhclNpemUpCi17Ci0gICAgaWYgKGhhc0NvZGUoKSkgewotI2lmIEVOQUJMRShZQVJSX0pJ
VCkKLSAgICAgICAgaWYgKG1fc3RhdGUgIT0gSklUQ29kZSkKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgaWYgKChjaGFyU2l6ZSA9PSBZYXJyOjpDaGFyOCkgJiYgKG1fcmVnRXhwSklUQ29k
ZS5oYXM4Qml0Q29kZSgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKChjaGFy
U2l6ZSA9PSBZYXJyOjpDaGFyMTYpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzMTZCaXRDb2RlKCkp
KQotICAgICAgICAgICAgcmV0dXJuOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0g
ICAgfQotCi0gICAgY29tcGlsZSgmdm0sIGNoYXJTaXplKTsKLX0KLQogaW50IFJlZ0V4cDo6bWF0
Y2goVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBWZWN0b3I8
aW50LCAzMj4mIG92ZWN0b3IpCiB7Ci0jaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgIG1f
cnRNYXRjaENhbGxDb3VudCsrOwotICAgIG1fcnRNYXRjaFRvdGFsU3ViamVjdFN0cmluZ0xlbiAr
PSAoZG91YmxlKShzLmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwotI2VuZGlmCi0KLSAgICBBU1NF
UlQobV9zdGF0ZSAhPSBQYXJzZUVycm9yKTsKLSAgICBjb21waWxlSWZOZWNlc3Nhcnkodm0sIHMu
aXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7Ci0KLSAgICBpbnQgb2Zmc2V0
VmVjdG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAyOwotICAgIG92ZWN0b3IucmVz
aXplKG9mZnNldFZlY3RvclNpemUpOwotICAgIGludCogb2Zmc2V0VmVjdG9yID0gb3ZlY3Rvci5k
YXRhKCk7Ci0KLSAgICBpbnQgcmVzdWx0OwotI2lmIEVOQUJMRShZQVJSX0pJVCkKLSAgICBpZiAo
bV9zdGF0ZSA9PSBKSVRDb2RlKSB7Ci0gICAgICAgIGlmIChzLmlzOEJpdCgpKQotICAgICAgICAg
ICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBzdGFy
dE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVjdG9yKS5zdGFydDsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmVzdWx0ID0gbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJz
MTYoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCksIG9mZnNldFZlY3Rvcikuc3RhcnQ7Ci0jaWYg
RU5BQkxFKFlBUlJfSklUX0RFQlVHKQotICAgICAgICBtYXRjaENvbXBhcmVXaXRoSW50ZXJwcmV0
ZXIocywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKLSNlbmRpZgotICAgIH0g
ZWxzZQotI2VuZGlmCi0gICAgICAgIHJlc3VsdCA9IFlhcnI6OmludGVycHJldChtX3JlZ0V4cEJ5
dGVjb2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+
KG9mZnNldFZlY3RvcikpOwotCi0gICAgLy8gRklYTUU6IFRoZSBZQVJSIGVuZ2luZSBzaG91bGQg
aGFuZGxlIHVuc2lnbmVkIG9yIHNpemVfdCBsZW5ndGggbWF0Y2hlcy4KLSAgICAvLyBUaGUgWUFS
UiBJbnRlcnByZXRlciBpcyAidW5zaWduZWQiIGNsZWFuLCB3aGlsZSB0aGUgWUFSUiBKSVQgaGFz
bid0IGJlZW4gYWRkcmVzc2VkLgotICAgIC8vIFRoZSBvZmZzZXQgdmVjdG9yIGhhbmRsaW5nIG5l
ZWRzIHRvIGNoYW5nZSBhcyB3ZWxsLgotICAgIC8vIFJpZ2h0IG5vdyB3ZSBjb252ZXJ0IGEgbWF0
Y2ggd2hlcmUgdGhlIG9mZnNldHMgb3ZlcmZsb3dlZCBpbnRvIG1hdGNoIGZhaWx1cmUuCi0gICAg
Ly8gVGhlcmUgYXJlIHR3byBwbGFjZXMgaW4gV2ViQ29yZSB0aGF0IGNhbGwgdGhlIGludGVycHJl
dGVyIGRpcmVjdGx5IHRoYXQgbmVlZCB0bwotICAgIC8vIGhhdmUgdGhlaXIgb2Zmc2V0cyBjaGFu
Z2VkIHRvIGludCBhcyB3ZWxsLiBUaGV5IGFyZSB5YXJyL1JlZ3VsYXJFeHByZXNzaW9uLmNwcAot
ICAgIC8vIGFuZCBpbnNwZWN0b3IvQ29udGVudFNlYXJjaFV0aWxpdGllcy5jcHAKLSAgICBpZiAo
cy5sZW5ndGgoKSA+IElOVF9NQVgpIHsKLSAgICAgICAgYm9vbCBvdmVyZmxvd2VkID0gZmFsc2U7
Ci0KLSAgICAgICAgaWYgKHJlc3VsdCA8IC0xKQotICAgICAgICAgICAgb3ZlcmZsb3dlZCA9IHRy
dWU7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8PSBtX251bVN1YnBhdHRlcm5z
OyBpKyspIHsKLSAgICAgICAgICAgIGlmICgob2Zmc2V0VmVjdG9yW2kqMl0gPCAtMSkgfHwgKChv
ZmZzZXRWZWN0b3JbaSoyXSA+PSAwKSAmJiAob2Zmc2V0VmVjdG9yW2kqMisxXSA8IC0xKSkpIHsK
LSAgICAgICAgICAgICAgICBvdmVyZmxvd2VkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBvZmZz
ZXRWZWN0b3JbaSoyXSA9IC0xOwotICAgICAgICAgICAgICAgIG9mZnNldFZlY3RvcltpKjIrMV0g
PSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChvdmVyZmxvd2Vk
KQotICAgICAgICAgICAgcmVzdWx0ID0gLTE7Ci0gICAgfQotCi0gICAgQVNTRVJUKHJlc3VsdCA+
PSAtMSk7Ci0KLSNpZiBSRUdFWFBfRlVOQ19URVNUX0RBVEFfR0VOCi0gICAgUmVnRXhwRnVuY3Rp
b25hbFRlc3RDb2xsZWN0b3I6OmdldCgpLT5vdXRwdXRPbmVUZXN0KHRoaXMsIHMsIHN0YXJ0T2Zm
c2V0LCBvZmZzZXRWZWN0b3IsIHJlc3VsdCk7Ci0jZW5kaWYKLQotI2lmIEVOQUJMRShSRUdFWFBf
VFJBQ0lORykKLSAgICBpZiAocmVzdWx0ICE9IC0xKQotICAgICAgICBtX3J0TWF0Y2hGb3VuZENv
dW50Kys7Ci0jZW5kaWYKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1hdGNoSW5s
aW5lKHZtLCBzLCBzdGFydE9mZnNldCwgb3ZlY3Rvcik7CiB9CiAKIHZvaWQgUmVnRXhwOjpjb21w
aWxlTWF0Y2hPbmx5KFZNKiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQpAQCAtNDM5
LDY1ICszMjUsOSBAQCB2b2lkIFJlZ0V4cDo6Y29tcGlsZU1hdGNoT25seShWTSogdm0sIFlhCiAg
ICAgbV9yZWdFeHBCeXRlY29kZSA9IFlhcnI6OmJ5dGVDb21waWxlKHBhdHRlcm4sICZ2bS0+bV9y
ZWdFeHBBbGxvY2F0b3IpOwogfQogCi12b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5TWF0
Y2hPbmx5KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQotewotICAgIGlmICho
YXNDb2RlKCkpIHsKLSNpZiBFTkFCTEUoWUFSUl9KSVQpCi0gICAgICAgIGlmIChtX3N0YXRlICE9
IEpJVENvZGUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgoY2hhclNpemUgPT0g
WWFycjo6Q2hhcjgpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzOEJpdENvZGVNYXRjaE9ubHkoKSkp
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6Q2hh
cjE2KSAmJiAobV9yZWdFeHBKSVRDb2RlLmhhczE2Qml0Q29kZU1hdGNoT25seSgpKSkKLSAgICAg
ICAgICAgIHJldHVybjsKLSNlbHNlCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIH0KLQot
ICAgIGNvbXBpbGVNYXRjaE9ubHkoJnZtLCBjaGFyU2l6ZSk7Ci19Ci0KIE1hdGNoUmVzdWx0IFJl
Z0V4cDo6bWF0Y2goVk0mIHZtLCBjb25zdCBTdHJpbmcmIHMsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
KQogewotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICBtX3J0TWF0Y2hPbmx5Q2FsbENv
dW50Kys7Ci0gICAgbV9ydE1hdGNoT25seVRvdGFsU3ViamVjdFN0cmluZ0xlbiArPSAoZG91Ymxl
KShzLmxlbmd0aCgpIC0gc3RhcnRPZmZzZXQpOwotI2VuZGlmCi0KLSAgICBBU1NFUlQobV9zdGF0
ZSAhPSBQYXJzZUVycm9yKTsKLSAgICBjb21waWxlSWZOZWNlc3NhcnlNYXRjaE9ubHkodm0sIHMu
aXM4Qml0KCkgPyBZYXJyOjpDaGFyOCA6IFlhcnI6OkNoYXIxNik7Ci0KLSNpZiBFTkFCTEUoWUFS
Ul9KSVQpCi0gICAgaWYgKG1fc3RhdGUgPT0gSklUQ29kZSkgewotICAgICAgICBNYXRjaFJlc3Vs
dCByZXN1bHQgPSBzLmlzOEJpdCgpID8KLSAgICAgICAgICAgIG1fcmVnRXhwSklUQ29kZS5leGVj
dXRlKHMuY2hhcmFjdGVyczgoKSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkpIDoKLSAgICAgICAg
ICAgIG1fcmVnRXhwSklUQ29kZS5leGVjdXRlKHMuY2hhcmFjdGVyczE2KCksIHN0YXJ0T2Zmc2V0
LCBzLmxlbmd0aCgpKTsKLSNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgICAgIGlmICgh
cmVzdWx0KQotICAgICAgICAgICAgbV9ydE1hdGNoT25seUZvdW5kQ291bnQrKzsKLSNlbmRpZgot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSNlbmRpZgotCi0gICAgaW50IG9mZnNldFZl
Y3RvclNpemUgPSAobV9udW1TdWJwYXR0ZXJucyArIDEpICogMjsKLSAgICBpbnQqIG9mZnNldFZl
Y3RvcjsKLSAgICBWZWN0b3I8aW50LCAzMj4gbm9uUmV0dXJuZWRPdmVjdG9yOwotICAgIG5vblJl
dHVybmVkT3ZlY3Rvci5yZXNpemUob2Zmc2V0VmVjdG9yU2l6ZSk7Ci0gICAgb2Zmc2V0VmVjdG9y
ID0gbm9uUmV0dXJuZWRPdmVjdG9yLmRhdGEoKTsKLSAgICBpbnQgciA9IFlhcnI6OmludGVycHJl
dChtX3JlZ0V4cEJ5dGVjb2RlLmdldCgpLCBzLCBzdGFydE9mZnNldCwgcmVpbnRlcnByZXRfY2Fz
dDx1bnNpZ25lZCo+KG9mZnNldFZlY3RvcikpOwotI2lmIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9H
RU4KLSAgICBSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6Z2V0KCktPm91dHB1dE9uZVRl
c3QodGhpcywgcywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKLSNlbmRpZgot
Ci0gICAgaWYgKHIgPj0gMCkgewotI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykKLSAgICAgICAg
bV9ydE1hdGNoT25seUZvdW5kQ291bnQrKzsKLSNlbmRpZgotICAgICAgICByZXR1cm4gTWF0Y2hS
ZXN1bHQociwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCo+KG9mZnNldFZlY3RvcilbMV0pOwot
ICAgIH0KLQotICAgIHJldHVybiBNYXRjaFJlc3VsdDo6ZmFpbGVkKCk7CisgICAgcmV0dXJuIG1h
dGNoSW5saW5lKHZtLCBzLCBzdGFydE9mZnNldCk7CiB9CiAKIHZvaWQgUmVnRXhwOjpkZWxldGVD
b2RlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5oCShyZXZpc2lv
biAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHAuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAwNywgMjAwOCwgMjAwOSwgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSwgSW5jLgogICoKICAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCkBAIC02NCw2ICs2NCwxMSBAQCBwdWJsaWM6CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBp
bnQgbWF0Y2goVk0mLCBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9y
PGludCwgMzI+JiBvdmVjdG9yKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBNYXRjaFJlc3VsdCBt
YXRjaChWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KTsKKworICAgIC8v
IENhbGwgdGhlc2UgdmVyc2lvbnMgb2YgdGhlIG1hdGNoIGZ1bmN0aW9ucyBpZiB5b3UncmUgZGVz
cGVyYXRlIGZvciBwZXJmb3JtYW5jZS4KKyAgICBpbnQgbWF0Y2hJbmxpbmUoVk0mLCBjb25zdCBT
dHJpbmcmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgVmVjdG9yPGludCwgMzI+JiBvdmVjdG9yKTsK
KyAgICBNYXRjaFJlc3VsdCBtYXRjaElubGluZShWTSYsIGNvbnN0IFN0cmluZyYsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0KTsKKyAgICAKICAgICB1bnNpZ25lZCBudW1TdWJwYXR0ZXJucygpIGNvbnN0
IHsgcmV0dXJuIG1fbnVtU3VicGF0dGVybnM7IH0KIAogICAgIGJvb2wgaGFzQ29kZSgpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MTk5OS0yMDAxLCAyMDA0IEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJp
Z2h0IChjKSAyMDA3LCAyMDA4LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlLCBJbmMuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDEwIFBldGVyIFZhcmdhIChwdmFyZ2FAaW5mLnUtc3plZ2VkLmh1KSwgVW5pdmVyc2l0
eSBvZiBTemVnZWQKKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVm
IFJlZ0V4cElubGluZXNfaAorI2RlZmluZSBSZWdFeHBJbmxpbmVzX2gKKworI2luY2x1ZGUgIlJl
Z0V4cC5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJZYXJyLmgiCisjaW5j
bHVkZSAiWWFyckpJVC5oIgorCisjZGVmaW5lIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9HRU4gMAor
CisjaWYgUkVHRVhQX0ZVTkNfVEVTVF9EQVRBX0dFTgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5j
bHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IEpTQyB7CisKKyNpZiBSRUdFWFBfRlVOQ19URVNUX0RBVEFfR0VOCitjbGFzcyBSZWdFeHBGdW5j
dGlvbmFsVGVzdENvbGxlY3RvciB7CisgICAgLy8gVGhpcyBjbGFzcyBpcyBub3QgdGhyZWFkIHNh
ZmUuCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IHNfZmlsZU5hbWU7
CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3IqIGdl
dCgpOworCisgICAgflJlZ0V4cEZ1bmN0aW9uYWxUZXN0Q29sbGVjdG9yKCk7CisKKyAgICB2b2lk
IG91dHB1dE9uZVRlc3QoUmVnRXhwKiwgU3RyaW5nLCBpbnQsIGludCosIGludCk7CisgICAgdm9p
ZCBjbGVhclJlZ0V4cChSZWdFeHAqIHJlZ0V4cCkKKyAgICB7CisgICAgICAgIGlmIChyZWdFeHAg
PT0gbV9sYXN0UmVnRXhwKQorICAgICAgICAgICAgbV9sYXN0UmVnRXhwID0gMDsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3IoKTsKKworICAgIHZv
aWQgb3V0cHV0RXNjYXBlZFN0cmluZyhjb25zdCBTdHJpbmcmLCBib29sIGVzY2FwZVNsYXNoID0g
ZmFsc2UpOworCisgICAgc3RhdGljIFJlZ0V4cEZ1bmN0aW9uYWxUZXN0Q29sbGVjdG9yKiBzX2lu
c3RhbmNlOworICAgIEZJTEUqIG1fZmlsZTsKKyAgICBSZWdFeHAqIG1fbGFzdFJlZ0V4cDsKK307
CisjZW5kaWYgLy8gUkVHRVhQX0ZVTkNfVEVTVF9EQVRBX0dFTgorCitBTFdBWVNfSU5MSU5FIHZv
aWQgUmVnRXhwOjpjb21waWxlSWZOZWNlc3NhcnkoVk0mIHZtLCBZYXJyOjpZYXJyQ2hhclNpemUg
Y2hhclNpemUpCit7CisgICAgaWYgKGhhc0NvZGUoKSkgeworI2lmIEVOQUJMRShZQVJSX0pJVCkK
KyAgICAgICAgaWYgKG1fc3RhdGUgIT0gSklUQ29kZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgaWYgKChjaGFyU2l6ZSA9PSBZYXJyOjpDaGFyOCkgJiYgKG1fcmVnRXhwSklUQ29kZS5o
YXM4Qml0Q29kZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKChjaGFyU2l6
ZSA9PSBZYXJyOjpDaGFyMTYpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzMTZCaXRDb2RlKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisgICAg
fQorCisgICAgY29tcGlsZSgmdm0sIGNoYXJTaXplKTsKK30KKworQUxXQVlTX0lOTElORSBpbnQg
UmVnRXhwOjptYXRjaElubGluZShWTSYgdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIFZlY3RvcjxpbnQsIDMyPiYgb3ZlY3RvcikKK3sKKyNpZiBFTkFCTEUoUkVHRVhQ
X1RSQUNJTkcpCisgICAgbV9ydE1hdGNoQ2FsbENvdW50Kys7CisgICAgbV9ydE1hdGNoVG90YWxT
dWJqZWN0U3RyaW5nTGVuICs9IChkb3VibGUpKHMubGVuZ3RoKCkgLSBzdGFydE9mZnNldCk7Cisj
ZW5kaWYKKworICAgIEFTU0VSVChtX3N0YXRlICE9IFBhcnNlRXJyb3IpOworICAgIGNvbXBpbGVJ
Zk5lY2Vzc2FyeSh2bSwgcy5pczhCaXQoKSA/IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KTsK
KworICAgIGludCBvZmZzZXRWZWN0b3JTaXplID0gKG1fbnVtU3VicGF0dGVybnMgKyAxKSAqIDI7
CisgICAgb3ZlY3Rvci5yZXNpemUob2Zmc2V0VmVjdG9yU2l6ZSk7CisgICAgaW50KiBvZmZzZXRW
ZWN0b3IgPSBvdmVjdG9yLmRhdGEoKTsKKworICAgIGludCByZXN1bHQ7CisjaWYgRU5BQkxFKFlB
UlJfSklUKQorICAgIGlmIChtX3N0YXRlID09IEpJVENvZGUpIHsKKyAgICAgICAgaWYgKHMuaXM4
Qml0KCkpCisgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUuZXhlY3V0ZShzLmNo
YXJhY3RlcnM4KCksIHN0YXJ0T2Zmc2V0LCBzLmxlbmd0aCgpLCBvZmZzZXRWZWN0b3IpLnN0YXJ0
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBtX3JlZ0V4cEpJVENvZGUuZXhl
Y3V0ZShzLmNoYXJhY3RlcnMxNigpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgoKSwgb2Zmc2V0VmVj
dG9yKS5zdGFydDsKKyNpZiBFTkFCTEUoWUFSUl9KSVRfREVCVUcpCisgICAgICAgIG1hdGNoQ29t
cGFyZVdpdGhJbnRlcnByZXRlcihzLCBzdGFydE9mZnNldCwgb2Zmc2V0VmVjdG9yLCByZXN1bHQp
OworI2VuZGlmCisgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgcmVzdWx0ID0gWWFycjo6aW50
ZXJwcmV0KG1fcmVnRXhwQnl0ZWNvZGUuZ2V0KCksIHMsIHN0YXJ0T2Zmc2V0LCByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkKj4ob2Zmc2V0VmVjdG9yKSk7CisKKyAgICAvLyBGSVhNRTogVGhlIFlB
UlIgZW5naW5lIHNob3VsZCBoYW5kbGUgdW5zaWduZWQgb3Igc2l6ZV90IGxlbmd0aCBtYXRjaGVz
LgorICAgIC8vIFRoZSBZQVJSIEludGVycHJldGVyIGlzICJ1bnNpZ25lZCIgY2xlYW4sIHdoaWxl
IHRoZSBZQVJSIEpJVCBoYXNuJ3QgYmVlbiBhZGRyZXNzZWQuCisgICAgLy8gVGhlIG9mZnNldCB2
ZWN0b3IgaGFuZGxpbmcgbmVlZHMgdG8gY2hhbmdlIGFzIHdlbGwuCisgICAgLy8gUmlnaHQgbm93
IHdlIGNvbnZlcnQgYSBtYXRjaCB3aGVyZSB0aGUgb2Zmc2V0cyBvdmVyZmxvd2VkIGludG8gbWF0
Y2ggZmFpbHVyZS4KKyAgICAvLyBUaGVyZSBhcmUgdHdvIHBsYWNlcyBpbiBXZWJDb3JlIHRoYXQg
Y2FsbCB0aGUgaW50ZXJwcmV0ZXIgZGlyZWN0bHkgdGhhdCBuZWVkIHRvCisgICAgLy8gaGF2ZSB0
aGVpciBvZmZzZXRzIGNoYW5nZWQgdG8gaW50IGFzIHdlbGwuIFRoZXkgYXJlIHlhcnIvUmVndWxh
ckV4cHJlc3Npb24uY3BwCisgICAgLy8gYW5kIGluc3BlY3Rvci9Db250ZW50U2VhcmNoVXRpbGl0
aWVzLmNwcAorICAgIGlmIChzLmxlbmd0aCgpID4gSU5UX01BWCkgeworICAgICAgICBib29sIG92
ZXJmbG93ZWQgPSBmYWxzZTsKKworICAgICAgICBpZiAocmVzdWx0IDwgLTEpCisgICAgICAgICAg
ICBvdmVyZmxvd2VkID0gdHJ1ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDw9
IG1fbnVtU3VicGF0dGVybnM7IGkrKykgeworICAgICAgICAgICAgaWYgKChvZmZzZXRWZWN0b3Jb
aSoyXSA8IC0xKSB8fCAoKG9mZnNldFZlY3RvcltpKjJdID49IDApICYmIChvZmZzZXRWZWN0b3Jb
aSoyKzFdIDwgLTEpKSkgeworICAgICAgICAgICAgICAgIG92ZXJmbG93ZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIG9mZnNldFZlY3RvcltpKjJdID0gLTE7CisgICAgICAgICAgICAgICAgb2Zm
c2V0VmVjdG9yW2kqMisxXSA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgaWYgKG92ZXJmbG93ZWQpCisgICAgICAgICAgICByZXN1bHQgPSAtMTsKKyAgICB9CisKKyAg
ICBBU1NFUlQocmVzdWx0ID49IC0xKTsKKworI2lmIFJFR0VYUF9GVU5DX1RFU1RfREFUQV9HRU4K
KyAgICBSZWdFeHBGdW5jdGlvbmFsVGVzdENvbGxlY3Rvcjo6Z2V0KCktPm91dHB1dE9uZVRlc3Qo
dGhpcywgcywgc3RhcnRPZmZzZXQsIG9mZnNldFZlY3RvciwgcmVzdWx0KTsKKyNlbmRpZgorCisj
aWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQorICAgIGlmIChyZXN1bHQgIT0gLTEpCisgICAgICAg
IG1fcnRNYXRjaEZvdW5kQ291bnQrKzsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworQUxXQVlTX0lOTElORSB2b2lkIFJlZ0V4cDo6Y29tcGlsZUlmTmVjZXNzYXJ5TWF0Y2hPbmx5
KFZNJiB2bSwgWWFycjo6WWFyckNoYXJTaXplIGNoYXJTaXplKQoreworICAgIGlmIChoYXNDb2Rl
KCkpIHsKKyNpZiBFTkFCTEUoWUFSUl9KSVQpCisgICAgICAgIGlmIChtX3N0YXRlICE9IEpJVENv
ZGUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6
Q2hhcjgpICYmIChtX3JlZ0V4cEpJVENvZGUuaGFzOEJpdENvZGVNYXRjaE9ubHkoKSkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgoY2hhclNpemUgPT0gWWFycjo6Q2hhcjE2KSAm
JiAobV9yZWdFeHBKSVRDb2RlLmhhczE2Qml0Q29kZU1hdGNoT25seSgpKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyNlbHNlCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorICAgIH0KKworICAgIGNv
bXBpbGVNYXRjaE9ubHkoJnZtLCBjaGFyU2l6ZSk7Cit9CisKK0FMV0FZU19JTkxJTkUgTWF0Y2hS
ZXN1bHQgUmVnRXhwOjptYXRjaElubGluZShWTSYgdm0sIGNvbnN0IFN0cmluZyYgcywgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQpCit7CisjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQorICAgIG1fcnRN
YXRjaE9ubHlDYWxsQ291bnQrKzsKKyAgICBtX3J0TWF0Y2hPbmx5VG90YWxTdWJqZWN0U3RyaW5n
TGVuICs9IChkb3VibGUpKHMubGVuZ3RoKCkgLSBzdGFydE9mZnNldCk7CisjZW5kaWYKKworICAg
IEFTU0VSVChtX3N0YXRlICE9IFBhcnNlRXJyb3IpOworICAgIGNvbXBpbGVJZk5lY2Vzc2FyeU1h
dGNoT25seSh2bSwgcy5pczhCaXQoKSA/IFlhcnI6OkNoYXI4IDogWWFycjo6Q2hhcjE2KTsKKwor
I2lmIEVOQUJMRShZQVJSX0pJVCkKKyAgICBpZiAobV9zdGF0ZSA9PSBKSVRDb2RlKSB7CisgICAg
ICAgIE1hdGNoUmVzdWx0IHJlc3VsdCA9IHMuaXM4Qml0KCkgPworICAgICAgICAgICAgbV9yZWdF
eHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzOCgpLCBzdGFydE9mZnNldCwgcy5sZW5ndGgo
KSkgOgorICAgICAgICAgICAgbV9yZWdFeHBKSVRDb2RlLmV4ZWN1dGUocy5jaGFyYWN0ZXJzMTYo
KSwgc3RhcnRPZmZzZXQsIHMubGVuZ3RoKCkpOworI2lmIEVOQUJMRShSRUdFWFBfVFJBQ0lORykK
KyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBtX3J0TWF0Y2hPbmx5Rm91bmRDb3Vu
dCsrOworI2VuZGlmCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2VuZGlmCisKKyAg
ICBpbnQgb2Zmc2V0VmVjdG9yU2l6ZSA9IChtX251bVN1YnBhdHRlcm5zICsgMSkgKiAyOworICAg
IGludCogb2Zmc2V0VmVjdG9yOworICAgIFZlY3RvcjxpbnQsIDMyPiBub25SZXR1cm5lZE92ZWN0
b3I7CisgICAgbm9uUmV0dXJuZWRPdmVjdG9yLnJlc2l6ZShvZmZzZXRWZWN0b3JTaXplKTsKKyAg
ICBvZmZzZXRWZWN0b3IgPSBub25SZXR1cm5lZE92ZWN0b3IuZGF0YSgpOworICAgIGludCByID0g
WWFycjo6aW50ZXJwcmV0KG1fcmVnRXhwQnl0ZWNvZGUuZ2V0KCksIHMsIHN0YXJ0T2Zmc2V0LCBy
ZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ob2Zmc2V0VmVjdG9yKSk7CisjaWYgUkVHRVhQX0ZV
TkNfVEVTVF9EQVRBX0dFTgorICAgIFJlZ0V4cEZ1bmN0aW9uYWxUZXN0Q29sbGVjdG9yOjpnZXQo
KS0+b3V0cHV0T25lVGVzdCh0aGlzLCBzLCBzdGFydE9mZnNldCwgb2Zmc2V0VmVjdG9yLCByZXN1
bHQpOworI2VuZGlmCisKKyAgICBpZiAociA+PSAwKSB7CisjaWYgRU5BQkxFKFJFR0VYUF9UUkFD
SU5HKQorICAgICAgICBtX3J0TWF0Y2hPbmx5Rm91bmRDb3VudCsrOworI2VuZGlmCisgICAgICAg
IHJldHVybiBNYXRjaFJlc3VsdChyLCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkKj4ob2Zmc2V0
VmVjdG9yKVsxXSk7CisgICAgfQorCisgICAgcmV0dXJuIE1hdGNoUmVzdWx0OjpmYWlsZWQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBSZWdFeHBJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRj
aGVzQXJyYXkuY3BwCShyZXZpc2lvbiAxOTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9SZWdFeHBNYXRjaGVzQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw5MCAr
MjYsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJh
eS5oIgogCi0jaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgotI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKLQogbmFtZXNwYWNlIEpTQyB7CiAKLXN0YXRpYyBjb25zdCBQcm9wZXJ0eU9mZnNldCBp
bmRleFByb3BlcnR5T2Zmc2V0ID0gMTAwOwotc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zmc2V0IGlu
cHV0UHJvcGVydHlPZmZzZXQgPSAxMDE7Ci0KLXN0YXRpYyBKU0FycmF5KiB0cnlDcmVhdGVVbmlu
aXRpYWxpemVkUmVnRXhwTWF0Y2hlc0FycmF5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHVuc2lnbmVkIGluaXRpYWxMZW5ndGgpCi17Ci0gICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0g
c3RkOjptYXgoQkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKLSAgICBpZiAodmVjdG9y
TGVuZ3RoID4gTUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICB2b2lkKiB0ZW1wOwotICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwg
QnV0dGVyZmx5Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0
cnVlLCB2ZWN0b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQotICAg
ICAgICByZXR1cm4gMDsKLSAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJv
bUJhc2UodGVtcCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKLSAgICBidXR0
ZXJmbHktPnNldFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOwotICAgIGJ1dHRlcmZseS0+c2V0
UHVibGljTGVuZ3RoKGluaXRpYWxMZW5ndGgpOwotCi0gICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0
ZVdpdGhCdXR0ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKLX0KLQotSlNBcnJheSog
Y3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KAotICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxP
YmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJpbmcqIGlucHV0LCBSZWdFeHAqIHJlZ0V4cCwKLSAg
ICB1bnNpZ25lZCBzdGFydE9mZnNldCwgTWF0Y2hSZXN1bHQmIHJlc3VsdCkKLXsKLSAgICBTYW1w
bGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiY3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5Iik7Ci0g
ICAgCi0gICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwotICAgIAotICAgIFZlY3Rvcjxp
bnQsIDMyPiBzdWJwYXR0ZXJuUmVzdWx0czsKLSAgICBpbnQgcG9zaXRpb24gPSByZWdFeHAtPm1h
dGNoKHZtLCBpbnB1dC0+dmFsdWUoZXhlYyksIHN0YXJ0T2Zmc2V0LCBzdWJwYXR0ZXJuUmVzdWx0
cyk7Ci0gICAgaWYgKHBvc2l0aW9uID09IC0xKSB7Ci0gICAgICAgIHJlc3VsdCA9IE1hdGNoUmVz
dWx0OjpmYWlsZWQoKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmVz
dWx0LnN0YXJ0ID0gcG9zaXRpb247Ci0gICAgcmVzdWx0LmVuZCA9IHN1YnBhdHRlcm5SZXN1bHRz
WzFdOwotICAgIAotICAgIEpTQXJyYXkqIGFycmF5OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkIGhhbmRsZSBhcnJheSBhbGxvY2F0aW9uIGVycm9ycyBncmFjZWZ1bGx5LgotICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxNDQKLSAgICAKLSAgICBp
ZiAoVU5MSUtFTFkoZ2xvYmFsT2JqZWN0LT5pc0hhdmluZ0FCYWRUaW1lKCkpKSB7Ci0gICAgICAg
IGFycmF5ID0gSlNBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZCh2bSwgZ2xvYmFsT2JqZWN0
LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUoKSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
ICsgMSk7Ci0gICAgICAgIAotICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBq
c1N1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQg
LSByZXN1bHQuc3RhcnQpKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh1bnNpZ25lZCBudW1TdWJw
YXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgewotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOwotICAgICAgICAgICAgICAg
IGlmIChzdGFydCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0sIGlu
cHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSk7Ci0gICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUlu
ZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGFycmF5ID0gdHJ5Q3JlYXRlVW5pbml0aWFsaXplZFJlZ0V4cE1h
dGNoZXNBcnJheSh2bSwgZ2xvYmFsT2JqZWN0LT5yZWdFeHBNYXRjaGVzQXJyYXlTdHJ1Y3R1cmUo
KSwgcmVnRXhwLT5udW1TdWJwYXR0ZXJucygpICsgMSk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KGFycmF5KTsKLSAgICAgICAgCi0gICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIDAs
IGpzU3Vic3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHJlc3VsdC5zdGFydCwgcmVzdWx0LmVu
ZCAtIHJlc3VsdC5zdGFydCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAgICAgICAKLSAgICAg
ICAgaWYgKHVuc2lnbmVkIG51bVN1YnBhdHRlcm5zID0gcmVnRXhwLT5udW1TdWJwYXR0ZXJucygp
KSB7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDw9IG51bVN1YnBhdHRlcm5z
OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpbnQgc3RhcnQgPSBzdWJwYXR0ZXJuUmVzdWx0c1sy
ICogaV07Ci0gICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID49IDApCi0gICAgICAgICAgICAgICAg
ICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIEpTUm9wZVN0cmluZzo6Y3JlYXRlU3Vi
c3RyaW5nT2ZSZXNvbHZlZCh2bSwgaW5wdXQsIHN0YXJ0LCBzdWJwYXR0ZXJuUmVzdWx0c1syICog
aSArIDFdIC0gc3RhcnQpLCBBcnJheVdpdGhDb250aWd1b3VzKTsKLSAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIGFycmF5LT5pbml0aWFsaXplSW5kZXgodm0sIGksIGpz
VW5kZWZpbmVkKCksIEFycmF5V2l0aENvbnRpZ3VvdXMpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgYXJyYXktPnB1dERpcmVjdCh2bSwgaW5kZXhQcm9wZXJ0eU9mZnNl
dCwganNOdW1iZXIocmVzdWx0LnN0YXJ0KSk7Ci0gICAgYXJyYXktPnB1dERpcmVjdCh2bSwgaW5w
dXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOwotCi0gICAgcmV0dXJuIGFycmF5OwotfQotCiBKU0Fy
cmF5KiBjcmVhdGVFbXB0eVJlZ0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIFJlZ0V4cCogcmVnRXhwKQogewogICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKQEAgLTEzOSw4ICs1Nyw4IEBAIEpTQXJyYXkqIGNyZWF0ZUVt
cHR5UmVnRXhwTWF0Y2hlc0FycmF5KEoKICAgICAgICAgfQogICAgIH0KIAotICAgIGFycmF5LT5w
dXREaXJlY3Qodm0sIGluZGV4UHJvcGVydHlPZmZzZXQsIGpzTnVtYmVyKC0xKSk7Ci0gICAgYXJy
YXktPnB1dERpcmVjdCh2bSwgaW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOworICAgIGFycmF5
LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQsIGpz
TnVtYmVyKC0xKSk7CisgICAgYXJyYXktPnB1dERpcmVjdCh2bSwgUmVnRXhwTWF0Y2hlc0FycmF5
SW5wdXRQcm9wZXJ0eU9mZnNldCwgaW5wdXQpOwogICAgIHJldHVybiBhcnJheTsKIH0KIApAQCAt
MTQ5LDkgKzY3LDkgQEAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlSW1wbChWTQog
ICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ2xvYmFsT2JqZWN0LT5hcnJheVN0cnVjdHVyZUZv
ckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oaW5kZXhpbmdUeXBlKTsKICAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQ7CiAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSwgdm0ucHJvcGVydHlOYW1lcy0+aW5kZXgsIDAsIG9mZnNl
dCk7Ci0gICAgQVNTRVJUKG9mZnNldCA9PSBpbmRleFByb3BlcnR5T2Zmc2V0KTsKKyAgICBBU1NF
UlQob2Zmc2V0ID09IFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQpOwogICAg
IHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUsIHZtLnByb3BlcnR5TmFtZXMtPmlucHV0LCAwLCBvZmZzZXQpOwotICAgIEFTU0VSVChvZmZz
ZXQgPT0gaW5wdXRQcm9wZXJ0eU9mZnNldCk7CisgICAgQVNTRVJUKG9mZnNldCA9PSBSZWdFeHBN
YXRjaGVzQXJyYXlJbnB1dFByb3BlcnR5T2Zmc2V0KTsKICAgICByZXR1cm4gc3RydWN0dXJlOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBNYXRjaGVzQXJy
YXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBN
YXRjaGVzQXJyYXkuaAkocmV2aXNpb24gMTk3NzgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUmVnRXhwTWF0Y2hlc0FycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDE3ICsy
MCw5NiBAQAogI2lmbmRlZiBSZWdFeHBNYXRjaGVzQXJyYXlfaAogI2RlZmluZSBSZWdFeHBNYXRj
aGVzQXJyYXlfaAogCisjaW5jbHVkZSAiQnV0dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
QXJyYXkuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmpl
Y3QuaCIKKyNpbmNsdWRlICJSZWdFeHBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwT2JqZWN0
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1KU0FycmF5KiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJy
YXkoRXhlY1N0YXRlKiwgSlNHbG9iYWxPYmplY3QqLCBKU1N0cmluZyosIFJlZ0V4cCosIHVuc2ln
bmVkIHN0YXJ0T2Zmc2V0LCBNYXRjaFJlc3VsdCYpOworc3RhdGljIGNvbnN0IFByb3BlcnR5T2Zm
c2V0IFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQgPSAxMDA7CitzdGF0aWMg
Y29uc3QgUHJvcGVydHlPZmZzZXQgUmVnRXhwTWF0Y2hlc0FycmF5SW5wdXRQcm9wZXJ0eU9mZnNl
dCA9IDEwMTsKKworQUxXQVlTX0lOTElORSBKU0FycmF5KiB0cnlDcmVhdGVVbmluaXRpYWxpemVk
UmVnRXhwTWF0Y2hlc0FycmF5KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHVuc2lnbmVk
IGluaXRpYWxMZW5ndGgpCit7CisgICAgdW5zaWduZWQgdmVjdG9yTGVuZ3RoID0gc3RkOjptYXgo
QkFTRV9WRUNUT1JfTEVOLCBpbml0aWFsTGVuZ3RoKTsKKyAgICBpZiAodmVjdG9yTGVuZ3RoID4g
TUFYX1NUT1JBR0VfVkVDVE9SX0xFTkdUSCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB2b2lk
KiB0ZW1wOworICAgIGlmICghdm0uaGVhcC50cnlBbGxvY2F0ZVN0b3JhZ2UoMCwgQnV0dGVyZmx5
Ojp0b3RhbFNpemUoMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpLCB0cnVlLCB2ZWN0
b3JMZW5ndGggKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgJnRlbXApKQorICAgICAgICByZXR1
cm4gMDsKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IEJ1dHRlcmZseTo6ZnJvbUJhc2UodGVt
cCwgMCwgc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpKTsKKyAgICBidXR0ZXJmbHktPnNl
dFZlY3Rvckxlbmd0aCh2ZWN0b3JMZW5ndGgpOworICAgIGJ1dHRlcmZseS0+c2V0UHVibGljTGVu
Z3RoKGluaXRpYWxMZW5ndGgpOworCisgICAgcmV0dXJuIEpTQXJyYXk6OmNyZWF0ZVdpdGhCdXR0
ZXJmbHkodm0sIHN0cnVjdHVyZSwgYnV0dGVyZmx5KTsKK30KKworQUxXQVlTX0lOTElORSBKU0Fy
cmF5KiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkoCisgICAgVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogaW5wdXQsIGNvbnN0IFN0cmluZyYgaW5wdXRWYWx1
ZSwKKyAgICBSZWdFeHAqIHJlZ0V4cCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIE1hdGNoUmVzdWx0
JiByZXN1bHQpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oImNyZWF0ZVJl
Z0V4cE1hdGNoZXNBcnJheSIpOworICAgIAorICAgIFZlY3RvcjxpbnQsIDMyPiBzdWJwYXR0ZXJu
UmVzdWx0czsKKyAgICBpbnQgcG9zaXRpb24gPSByZWdFeHAtPm1hdGNoSW5saW5lKHZtLCBpbnB1
dFZhbHVlLCBzdGFydE9mZnNldCwgc3VicGF0dGVyblJlc3VsdHMpOworICAgIGlmIChwb3NpdGlv
biA9PSAtMSkgeworICAgICAgICByZXN1bHQgPSBNYXRjaFJlc3VsdDo6ZmFpbGVkKCk7CisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJlc3VsdC5zdGFydCA9IHBvc2l0aW9u
OworICAgIHJlc3VsdC5lbmQgPSBzdWJwYXR0ZXJuUmVzdWx0c1sxXTsKKyAgICAKKyAgICBKU0Fy
cmF5KiBhcnJheTsKKworICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBoYW5kbGUgYXJyYXkgYWxs
b2NhdGlvbiBlcnJvcnMgZ3JhY2VmdWxseS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ0CisgICAgCisgICAgaWYgKFVOTElLRUxZKGdsb2JhbE9i
amVjdC0+aXNIYXZpbmdBQmFkVGltZSgpKSkgeworICAgICAgICBhcnJheSA9IEpTQXJyYXk6OnRy
eUNyZWF0ZVVuaW5pdGlhbGl6ZWQodm0sIGdsb2JhbE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5
U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSArIDEpOworICAgICAgICAKKyAg
ICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgMCwganNTdWJzdHJpbmdPZlJlc29sdmVk
KHZtLCBpbnB1dCwgcmVzdWx0LnN0YXJ0LCByZXN1bHQuZW5kIC0gcmVzdWx0LnN0YXJ0KSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAodW5zaWduZWQgbnVtU3VicGF0dGVybnMgPSByZWdFeHAtPm51
bVN1YnBhdHRlcm5zKCkpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPD0g
bnVtU3VicGF0dGVybnM7ICsraSkgeworICAgICAgICAgICAgICAgIGludCBzdGFydCA9IHN1YnBh
dHRlcm5SZXN1bHRzWzIgKiBpXTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQgPj0gMCkKKyAg
ICAgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwgSlNSb3BlU3Ry
aW5nOjpjcmVhdGVTdWJzdHJpbmdPZlJlc29sdmVkKHZtLCBpbnB1dCwgc3RhcnQsIHN1YnBhdHRl
cm5SZXN1bHRzWzIgKiBpICsgMV0gLSBzdGFydCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgYXJyYXktPmluaXRpYWxpemVJbmRleCh2bSwgaSwganNVbmRlZmlu
ZWQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBh
cnJheSA9IHRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWRSZWdFeHBNYXRjaGVzQXJyYXkodm0sIGdsb2Jh
bE9iamVjdC0+cmVnRXhwTWF0Y2hlc0FycmF5U3RydWN0dXJlKCksIHJlZ0V4cC0+bnVtU3VicGF0
dGVybnMoKSArIDEpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChhcnJheSk7CisgICAgICAgIAor
ICAgICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCAwLCBqc1N1YnN0cmluZ09mUmVzb2x2
ZWQodm0sIGlucHV0LCByZXN1bHQuc3RhcnQsIHJlc3VsdC5lbmQgLSByZXN1bHQuc3RhcnQpLCBB
cnJheVdpdGhDb250aWd1b3VzKTsKKyAgICAgICAgCisgICAgICAgIGlmICh1bnNpZ25lZCBudW1T
dWJwYXR0ZXJucyA9IHJlZ0V4cC0+bnVtU3VicGF0dGVybnMoKSkgeworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8PSBudW1TdWJwYXR0ZXJuczsgKytpKSB7CisgICAgICAgICAg
ICAgICAgaW50IHN0YXJ0ID0gc3VicGF0dGVyblJlc3VsdHNbMiAqIGldOworICAgICAgICAgICAg
ICAgIGlmIChzdGFydCA+PSAwKQorICAgICAgICAgICAgICAgICAgICBhcnJheS0+aW5pdGlhbGl6
ZUluZGV4KHZtLCBpLCBKU1JvcGVTdHJpbmc6OmNyZWF0ZVN1YnN0cmluZ09mUmVzb2x2ZWQodm0s
IGlucHV0LCBzdGFydCwgc3VicGF0dGVyblJlc3VsdHNbMiAqIGkgKyAxXSAtIHN0YXJ0KSwgQXJy
YXlXaXRoQ29udGlndW91cyk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBhcnJheS0+aW5pdGlhbGl6ZUluZGV4KHZtLCBpLCBqc1VuZGVmaW5lZCgpLCBBcnJheVdp
dGhDb250aWd1b3VzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGFy
cmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4cE1hdGNoZXNBcnJheUluZGV4UHJvcGVydHlPZmZzZXQs
IGpzTnVtYmVyKHJlc3VsdC5zdGFydCkpOworICAgIGFycmF5LT5wdXREaXJlY3Qodm0sIFJlZ0V4
cE1hdGNoZXNBcnJheUlucHV0UHJvcGVydHlPZmZzZXQsIGlucHV0KTsKKworICAgIHJldHVybiBh
cnJheTsKK30KKwogaW5saW5lIEpTQXJyYXkqIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheShFeGVj
U3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJp
bmcsIFJlZ0V4cCogcmVnRXhwLCB1bnNpZ25lZCBzdGFydE9mZnNldCkKIHsKICAgICBNYXRjaFJl
c3VsdCBpZ25vcmVkUmVzdWx0OwotICAgIHJldHVybiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXko
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdHJpbmcsIHJlZ0V4cCwgc3RhcnRPZmZzZXQsIGlnbm9yZWRS
ZXN1bHQpOworICAgIHJldHVybiBjcmVhdGVSZWdFeHBNYXRjaGVzQXJyYXkoZ2xvYmFsT2JqZWN0
LT52bSgpLCBnbG9iYWxPYmplY3QsIHN0cmluZywgc3RyaW5nLT52YWx1ZShleGVjKSwgcmVnRXhw
LCBzdGFydE9mZnNldCwgaWdub3JlZFJlc3VsdCk7CiB9CiBKU0FycmF5KiBjcmVhdGVFbXB0eVJl
Z0V4cE1hdGNoZXNBcnJheShKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKiwgUmVnRXhwKik7CiBT
dHJ1Y3R1cmUqIGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheVN0cnVjdHVyZShWTSYsIEpTR2xvYmFs
T2JqZWN0Kik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4
cE9iamVjdC5jcHAJKHJldmlzaW9uIDE5Nzc4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1JlZ0V4cE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwQ29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJSZWdFeHBNYXRjaGVzQXJyYXkuaCIKKyNpbmNsdWRlICJSZWdFeHBPYmplY3RJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiUmVnRXhwUHJvdG90eXBlLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgogCkBAIC0xNTksNzcgKzE2MCwxNSBAQCB2b2lkIFJlZ0V4cE9i
amVjdDo6cHV0KEpTQ2VsbCogY2VsbCwgRXhlCiAgICAgQmFzZTo6cHV0KGNlbGwsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCi1BTFdBWVNfSU5MSU5FIHVuc2lnbmVkIGdl
dExhc3RJbmRleEFzVW5zaWduZWQoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBSZWdFeHBPYmplY3Qq
IHJlZ0V4cE9iamVjdCwgY29uc3QgU3RyaW5nJiBpbnB1dCkKLXsKLSAgICBKU1ZhbHVlIGpzTGFz
dEluZGV4ID0gcmVnRXhwT2JqZWN0LT5nZXRMYXN0SW5kZXgoKTsKLSAgICB1bnNpZ25lZCBsYXN0
SW5kZXg7Ci0gICAgaWYgKExJS0VMWShqc0xhc3RJbmRleC5pc1VJbnQzMigpKSkgewotICAgICAg
ICBsYXN0SW5kZXggPSBqc0xhc3RJbmRleC5hc1VJbnQzMigpOwotICAgICAgICBpZiAobGFzdElu
ZGV4ID4gaW5wdXQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHJlZ0V4cE9iamVjdC0+c2V0TGFz
dEluZGV4KGV4ZWMsIDApOwotICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFYOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG91YmxlIGRvdWJsZUxhc3RJbmRleCA9IGpzTGFzdElu
ZGV4LnRvSW50ZWdlcihleGVjKTsKLSAgICAgICAgaWYgKGRvdWJsZUxhc3RJbmRleCA8IDAgfHwg
ZG91YmxlTGFzdEluZGV4ID4gaW5wdXQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHJlZ0V4cE9i
amVjdC0+c2V0TGFzdEluZGV4KGV4ZWMsIDApOwotICAgICAgICAgICAgcmV0dXJuIFVJTlRfTUFY
OwotICAgICAgICB9Ci0gICAgICAgIGxhc3RJbmRleCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihk
b3VibGVMYXN0SW5kZXgpOwotICAgIH0KLSAgICByZXR1cm4gbGFzdEluZGV4OwotfQotCiBKU1Zh
bHVlIFJlZ0V4cE9iamVjdDo6ZXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIEpTU3RyaW5nKiBzdHJpbmcpCiB7Ci0gICAgUmVnRXhwKiByZWdFeHAgPSB0
aGlzLT5yZWdFeHAoKTsKLSAgICBSZWdFeHBDb25zdHJ1Y3RvciogcmVnRXhwQ29uc3RydWN0b3Ig
PSBnbG9iYWxPYmplY3QtPnJlZ0V4cENvbnN0cnVjdG9yKCk7Ci0gICAgU3RyaW5nIGlucHV0ID0g
c3RyaW5nLT52YWx1ZShleGVjKTsgLy8gRklYTUU6IEhhbmRsZSBlcnJvcnMuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTUxNDUKLSAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7Ci0KLSAgICBpZiAoIXJlZ0V4cC0+Z2xvYmFsKCkpIHsKLSAgICAgICAgTWF0
Y2hSZXN1bHQgcmVzdWx0OwotICAgICAgICBKU0FycmF5KiBhcnJheSA9IGNyZWF0ZVJlZ0V4cE1h
dGNoZXNBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIHN0cmluZywgcmVnRXhwLCAwLCByZXN1bHQp
OwotICAgICAgICBpZiAoIWFycmF5KQotICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAg
ICAgICByZWdFeHBDb25zdHJ1Y3Rvci0+cmVjb3JkTWF0Y2godm0sIHJlZ0V4cCwgc3RyaW5nLCBy
ZXN1bHQpOwotICAgICAgICByZXR1cm4gYXJyYXk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgbGFz
dEluZGV4ID0gZ2V0TGFzdEluZGV4QXNVbnNpZ25lZChleGVjLCB0aGlzLCBpbnB1dCk7Ci0gICAg
aWYgKGxhc3RJbmRleCA9PSBVSU5UX01BWCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAg
IAotICAgIE1hdGNoUmVzdWx0IHJlc3VsdDsKLSAgICBKU0FycmF5KiBhcnJheSA9Ci0gICAgICAg
IGNyZWF0ZVJlZ0V4cE1hdGNoZXNBcnJheShleGVjLCBnbG9iYWxPYmplY3QsIHN0cmluZywgcmVn
RXhwLCBsYXN0SW5kZXgsIHJlc3VsdCk7Ci0gICAgaWYgKCFhcnJheSkgewotICAgICAgICBzZXRM
YXN0SW5kZXgoZXhlYywgMCk7Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0gICAg
c2V0TGFzdEluZGV4KGV4ZWMsIHJlc3VsdC5lbmQpOwotICAgIHJlZ0V4cENvbnN0cnVjdG9yLT5y
ZWNvcmRNYXRjaCh2bSwgcmVnRXhwLCBzdHJpbmcsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIGFycmF5
OworICAgIHJldHVybiBleGVjSW5saW5lKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RyaW5nKTsKIH0K
IAogLy8gU2hhcmVkIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgdGVzdCBhbmQgZXhlYy4KIE1hdGNo
UmVzdWx0IFJlZ0V4cE9iamVjdDo6bWF0Y2goRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKQogewotICAgIFJlZ0V4cCogcmVnRXhw
ID0gdGhpcy0+cmVnRXhwKCk7Ci0gICAgUmVnRXhwQ29uc3RydWN0b3IqIHJlZ0V4cENvbnN0cnVj
dG9yID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBDb25zdHJ1Y3RvcigpOwotICAgIFN0cmluZyBpbnB1
dCA9IHN0cmluZy0+dmFsdWUoZXhlYyk7IC8vIEZJWE1FOiBIYW5kbGUgZXJyb3JzLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU1MTQ1Ci0gICAgVk0mIHZtID0gZ2xv
YmFsT2JqZWN0LT52bSgpOwotICAgIGlmICghcmVnRXhwLT5nbG9iYWwoKSkKLSAgICAgICAgcmV0
dXJuIHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2godm0sIHJlZ0V4cCwgc3RyaW5nLCBp
bnB1dCwgMCk7Ci0KLSAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSBnZXRMYXN0SW5kZXhBc1Vuc2ln
bmVkKGV4ZWMsIHRoaXMsIGlucHV0KTsKLSAgICBpZiAobGFzdEluZGV4ID09IFVJTlRfTUFYKQot
ICAgICAgICByZXR1cm4gTWF0Y2hSZXN1bHQ6OmZhaWxlZCgpOwotICAgIAotICAgIE1hdGNoUmVz
dWx0IHJlc3VsdCA9IHJlZ0V4cENvbnN0cnVjdG9yLT5wZXJmb3JtTWF0Y2godm0sIHJlZ0V4cCwg
c3RyaW5nLCBpbnB1dCwgbGFzdEluZGV4KTsKLSAgICBzZXRMYXN0SW5kZXgoZXhlYywgcmVzdWx0
LmVuZCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbWF0Y2hJbmxpbmUoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdHJpbmcpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCShyZXZpc2lvbiAx
OTc3ODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsOSBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgYm9v
bCB0ZXN0KEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNT
dHJpbmcqIHN0cmluZykgeyByZXR1cm4gISFtYXRjaChleGVjLCBnbG9iYWxPYmplY3QsIHN0cmlu
Zyk7IH0KKyAgICBib29sIHRlc3RJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5nKSB7IHJldHVybiAhIW1hdGNoSW5saW5l
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RyaW5nKTsgfQogICAgIEpTVmFsdWUgZXhlYyhFeGVjU3Rh
dGUqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CisgICAgSlNWYWx1ZSBleGVjSW5saW5l
KEV4ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKIAogICAgIHN0YXRpYyBi
b29sIGdldE93blByb3BlcnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlTbG90Jik7CiAgICAgc3RhdGljIHZvaWQgcHV0KEpTQ2VsbCosIEV4ZWNTdGF0
ZSosIFByb3BlcnR5TmFtZSwgSlNWYWx1ZSwgUHV0UHJvcGVydHlTbG90Jik7CkBAIC0xMDMsNiAr
MTA1LDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIE1hdGNoUmVzdWx0IG1hdGNoKEV4
ZWNTdGF0ZSosIEpTR2xvYmFsT2JqZWN0KiwgSlNTdHJpbmcqKTsKKyAgICBNYXRjaFJlc3VsdCBt
YXRjaElubGluZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIEpTU3RyaW5nKik7CiAKICAg
ICBXcml0ZUJhcnJpZXI8UmVnRXhwPiBtX3JlZ0V4cDsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4gbV9sYXN0SW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHBPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTEzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBv
cnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4
LCAyMDEyLCAyMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIFJlZ0V4cE9iamVjdElubGluZXNfaAor
I2RlZmluZSBSZWdFeHBPYmplY3RJbmxpbmVzX2gKKworI2luY2x1ZGUgIkJ1dHRlcmZseUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkhlbHBlcnMuaCIK
KyNpbmNsdWRlICJKU0FycmF5LmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNs
dWRlICJKU1N0cmluZy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJSZWdF
eHBDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlJlZ0V4cE1hdGNoZXNBcnJheS5oIgorI2luY2x1
ZGUgIlJlZ0V4cE9iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworQUxXQVlTX0lOTElORSB1
bnNpZ25lZCBnZXRSZWdFeHBPYmplY3RMYXN0SW5kZXhBc1Vuc2lnbmVkKAorICAgIEV4ZWNTdGF0
ZSogZXhlYywgUmVnRXhwT2JqZWN0KiByZWdFeHBPYmplY3QsIGNvbnN0IFN0cmluZyYgaW5wdXQp
Cit7CisgICAgSlNWYWx1ZSBqc0xhc3RJbmRleCA9IHJlZ0V4cE9iamVjdC0+Z2V0TGFzdEluZGV4
KCk7CisgICAgdW5zaWduZWQgbGFzdEluZGV4OworICAgIGlmIChMSUtFTFkoanNMYXN0SW5kZXgu
aXNVSW50MzIoKSkpIHsKKyAgICAgICAgbGFzdEluZGV4ID0ganNMYXN0SW5kZXguYXNVSW50MzIo
KTsKKyAgICAgICAgaWYgKGxhc3RJbmRleCA+IGlucHV0Lmxlbmd0aCgpKSB7CisgICAgICAgICAg
ICByZWdFeHBPYmplY3QtPnNldExhc3RJbmRleChleGVjLCAwKTsKKyAgICAgICAgICAgIHJldHVy
biBVSU5UX01BWDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGRvdWJsZSBkb3Vi
bGVMYXN0SW5kZXggPSBqc0xhc3RJbmRleC50b0ludGVnZXIoZXhlYyk7CisgICAgICAgIGlmIChk
b3VibGVMYXN0SW5kZXggPCAwIHx8IGRvdWJsZUxhc3RJbmRleCA+IGlucHV0Lmxlbmd0aCgpKSB7
CisgICAgICAgICAgICByZWdFeHBPYmplY3QtPnNldExhc3RJbmRleChleGVjLCAwKTsKKyAgICAg
ICAgICAgIHJldHVybiBVSU5UX01BWDsKKyAgICAgICAgfQorICAgICAgICBsYXN0SW5kZXggPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZG91YmxlTGFzdEluZGV4KTsKKyAgICB9CisgICAgcmV0dXJu
IGxhc3RJbmRleDsKK30KKworSlNWYWx1ZSBSZWdFeHBPYmplY3Q6OmV4ZWNJbmxpbmUoRXhlY1N0
YXRlKiBleGVjLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1N0cmluZyogc3RyaW5n
KQoreworICAgIFJlZ0V4cCogcmVnRXhwID0gdGhpcy0+cmVnRXhwKCk7CisgICAgUmVnRXhwQ29u
c3RydWN0b3IqIHJlZ0V4cENvbnN0cnVjdG9yID0gZ2xvYmFsT2JqZWN0LT5yZWdFeHBDb25zdHJ1
Y3RvcigpOworICAgIFN0cmluZyBpbnB1dCA9IHN0cmluZy0+dmFsdWUoZXhlYyk7IC8vIEZJWE1F
OiBIYW5kbGUgZXJyb3JzLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU1MTQ1CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOworCisgICAgYm9vbCBnbG9i
YWwgPSByZWdFeHAtPmdsb2JhbCgpOworCisgICAgdW5zaWduZWQgbGFzdEluZGV4OworICAgIGlm
IChnbG9iYWwpIHsKKyAgICAgICAgbGFzdEluZGV4ID0gZ2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4
QXNVbnNpZ25lZChleGVjLCB0aGlzLCBpbnB1dCk7CisgICAgICAgIGlmIChsYXN0SW5kZXggPT0g
VUlOVF9NQVgpCisgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIGxhc3RJbmRleCA9IDA7CisgICAgCisgICAgTWF0Y2hSZXN1bHQgcmVzdWx0OworICAgIEpT
QXJyYXkqIGFycmF5ID0KKyAgICAgICAgY3JlYXRlUmVnRXhwTWF0Y2hlc0FycmF5KHZtLCBnbG9i
YWxPYmplY3QsIHN0cmluZywgaW5wdXQsIHJlZ0V4cCwgbGFzdEluZGV4LCByZXN1bHQpOworICAg
IGlmICghYXJyYXkpIHsKKyAgICAgICAgaWYgKGdsb2JhbCkKKyAgICAgICAgICAgIHNldExhc3RJ
bmRleChleGVjLCAwKTsKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIH0KKyAgICBpZiAo
Z2xvYmFsKQorICAgICAgICBzZXRMYXN0SW5kZXgoZXhlYywgcmVzdWx0LmVuZCk7CisgICAgcmVn
RXhwQ29uc3RydWN0b3ItPnJlY29yZE1hdGNoKHZtLCByZWdFeHAsIHN0cmluZywgcmVzdWx0KTsK
KyAgICByZXR1cm4gYXJyYXk7Cit9CisKKy8vIFNoYXJlZCBpbXBsZW1lbnRhdGlvbiB1c2VkIGJ5
IHRlc3QgYW5kIGV4ZWMuCitNYXRjaFJlc3VsdCBSZWdFeHBPYmplY3Q6Om1hdGNoSW5saW5lKAor
ICAgIEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNTdHJp
bmcqIHN0cmluZykKK3sKKyAgICBSZWdFeHAqIHJlZ0V4cCA9IHRoaXMtPnJlZ0V4cCgpOworICAg
IFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3RvciA9IGdsb2JhbE9iamVjdC0+cmVn
RXhwQ29uc3RydWN0b3IoKTsKKyAgICBTdHJpbmcgaW5wdXQgPSBzdHJpbmctPnZhbHVlKGV4ZWMp
OyAvLyBGSVhNRTogSGFuZGxlIGVycm9ycy4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1NTE0NQorICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBp
ZiAoIXJlZ0V4cC0+Z2xvYmFsKCkpCisgICAgICAgIHJldHVybiByZWdFeHBDb25zdHJ1Y3Rvci0+
cGVyZm9ybU1hdGNoKHZtLCByZWdFeHAsIHN0cmluZywgaW5wdXQsIDApOworCisgICAgdW5zaWdu
ZWQgbGFzdEluZGV4ID0gZ2V0UmVnRXhwT2JqZWN0TGFzdEluZGV4QXNVbnNpZ25lZChleGVjLCB0
aGlzLCBpbnB1dCk7CisgICAgaWYgKGxhc3RJbmRleCA9PSBVSU5UX01BWCkKKyAgICAgICAgcmV0
dXJuIE1hdGNoUmVzdWx0OjpmYWlsZWQoKTsKKyAgICAKKyAgICBNYXRjaFJlc3VsdCByZXN1bHQg
PSByZWdFeHBDb25zdHJ1Y3Rvci0+cGVyZm9ybU1hdGNoKHZtLCByZWdFeHAsIHN0cmluZywgaW5w
dXQsIGxhc3RJbmRleCk7CisgICAgc2V0TGFzdEluZGV4KGV4ZWMsIHJlc3VsdC5lbmQpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gUmVn
RXhwT2JqZWN0SW5saW5lc19oCisK
</data>

          </attachment>
      

    </bug>

</bugzilla>